A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 汗血黑马 于 2014-3-25 11:04 编辑

我觉得需要先要把它转换成接收String型的泛型,然后再存入对象,你们觉得呢?如何实现.

6 个回复

倒序浏览
反射可以
应该必须处于成员位置才可以
回复 使用道具 举报
这个反射是完全可以做到的。而且不用转类型。
List<Inteter> list = new ArrayList<String>();

list.getClass().getMethod("add",String.class).invoke(list,"abc");

这样就存放进去了。

你还没学反射吧。java虚拟机在编译后,就会去类型化,这样用反射就不会报异常。
回复 使用道具 举报
ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。
1.刚刚看到的时候,也是很纳闷后来仔细看了下,java的反射机制;
2.这个可以通过java的反射机制来实现;
3.下面是一个例子:
package com.credream.refelect;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class TestFile {
public static void main(String[] args) throws Exception {
List<Integer> list = new ArrayList<Integer>(); //定义Integer泛型
String str = "abc";
Method[] method=list.getClass().getMethods();//取得list的所有方法
System.out.println(method.length);
for(int i=0;i<method.length;i++){
System.out.println(method[i]);//遍历打印list的方法
}
method[0].invoke(list, str);//通过反射来执行list的第一个方法,第一个是list对象,代表该对象的方法,第二个是方法参数
System.out.println(list.size());
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 很给力!

查看全部评分

回复 使用道具 举报
在JAVA中泛型只是对编译器有用而已,就是说定义泛型只是表面现象,在加载进JUM虚拟机时就会去掉泛型。这样的话,就可以用到反射了,反射是直接绕过编译器,调用类加载器。其实还有很多现象,比如单例设计模式、封装都可以用反射来破。
这个的具体代码上面已经有人写了我就不写了,记住原理,类名.class   对象名.getclass  Class.forname(内存地址)都可以创建出对象的字符码,也就是Class ,这个字符码可以做很多很多事情,包括改方法 Method  改成员Field 和构造方法 construct 。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 很给力!

查看全部评分

回复 使用道具 举报
用反射就可以的,因为泛型只是在编译的时候才会用到,反射是在执行的时候存对象进去,所以用反射是没问题的..

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
刘先斌 发表于 2014-3-24 20:35
ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。
1.刚刚 ...

怎么我复制你的代码试了一下不行啊。


。。。。。。。。。。。。。。。。。。。。。。。。。。
35
public java.lang.Object java.util.ArrayList.clone()
public void java.util.ArrayList.add(int,java.lang.Object)
public boolean java.util.ArrayList.add(java.lang.Object)
public boolean java.util.ArrayList.contains(java.lang.Object)
public java.lang.Object java.util.ArrayList.get(int)
public int java.util.ArrayList.indexOf(java.lang.Object)
public boolean java.util.ArrayList.isEmpty()
public int java.util.ArrayList.lastIndexOf(java.lang.Object)
public int java.util.ArrayList.size()
public java.util.List java.util.ArrayList.subList(int,int)
public java.lang.Object[] java.util.ArrayList.toArray(java.lang.Object[])
public java.lang.Object[] java.util.ArrayList.toArray()
public boolean java.util.ArrayList.addAll(int,java.util.Collection)
public boolean java.util.ArrayList.addAll(java.util.Collection)
public java.util.Iterator java.util.ArrayList.iterator()
public boolean java.util.ArrayList.remove(java.lang.Object)
public java.lang.Object java.util.ArrayList.remove(int)
public void java.util.ArrayList.clear()
public java.lang.Object java.util.ArrayList.set(int,java.lang.Object)
public void java.util.ArrayList.ensureCapacity(int)
public void java.util.ArrayList.trimToSize()
public java.util.ListIterator java.util.ArrayList.listIterator(int)
public java.util.ListIterator java.util.ArrayList.listIterator()
public boolean java.util.ArrayList.removeAll(java.util.Collection)
public boolean java.util.ArrayList.retainAll(java.util.Collection)
public int java.util.AbstractList.hashCode()
public boolean java.util.AbstractList.equals(java.lang.Object)
public java.lang.String java.util.AbstractCollection.toString()
public boolean java.util.AbstractCollection.containsAll(java.util.Collection)
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at cn.reflect.TestFile.main(TestFile.java:20)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马