`
抛出异常的爱
  • 浏览: 620095 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

今天想回又想这样回会不会很损

阅读更多
http://www.iteye.com/topic/833774
0704681032 写道
看了楼主的文章,很有感触!就其中一个问题问下大家

List<String> list = new LinkedList<String>();

利用反射怎么得到String。。


那是个皇帝的新衣
看看无知长什么样而已.

面试时问一个不可能实现的功能.
如果知道原理自然
会推出无解.

PS:据我所知这是无解的....除非javac否则无区别

运行时反编译代码里list
里安放的都是object

分享到:
评论
3 楼 myheartflies 2011-03-24  
带有范型类型(接口OR类)声明,带有泛型参数的方法或者字段,是可以获得的.但是像
List<String> list = new LinkedList<String>();作为局部变量声明那就搞不定了.

public class Main {

    public static List<String> list = new LinkedList<String>();

    public static void main(String[] args) throws SecurityException, NoSuchFieldException {
        Type type = Main.class.getField("list").getGenericType();
        if (type instanceof ParameterizedType) {
            ParameterizedType pt = ((ParameterizedType) type);
            System.out.println(pt.getActualTypeArguments()[0]);
        }

    }
}


2 楼 抛出异常的爱 2010-12-07  
我也是这想猜的.....
1 楼 hfms 2010-12-07  
我的理解是,泛型是用来在编译时验证容器中所装的对象类型是否正确。而在运行的时候,JVM并不知道容器中的对象的具体类型(都是Object的,呵呵)。
但是由于在编译的时候已经对对象类型进行了验证,因此在运行时容器中的对象可以被强制转换为我们需要的类型。从而避免了classCastException。
不知道正不正确,俺老崇拜你了,请你指正!

相关推荐

Global site tag (gtag.js) - Google Analytics