黑马程序员技术交流社区
标题:
反射的问题
[打印本页]
作者:
彭小芳
时间:
2012-2-15 16:58
标题:
反射的问题
本帖最后由 pengfangjava 于 2012-2-16 16:44 编辑
package reflection;
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) {
Class<String> cl = String.class;//正确
Class<String> cl1 = new String().getClass(); //错误
Class<? extends String> cl2 = new String().getClass();//只能这样
}
}
复制代码
String.class和new String().getClass()搞不清楚了。。。求指教
作者:
冯祖焱
时间:
2012-2-15 17:03
因为java有动态绑定这样一个特性
Class<String> cl1 = new String().getClass(); //错误
因为你new一个对象,在编译时期无法确定你new的是什么对象,只能说你new的对象必须是String或者String的子类,虽然String类final的,其他类同理。
所以 Class<? extends String> cl2 = new String().getClass();//只能这样
作者:
刘基军
时间:
2012-2-15 17:12
参考API中Object类的getClass()描述:
getClass
public final Class<?> getClass()返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
实际结果类型是 Class<? extends |X|>,其中 |X| 表示清除表达式中的静态类型,该表达式调用 getClass。 例如,以下代码片段中不需要强制转换:
Number n = 0;
Class<? extends Number> c = n.getClass();
返回:
表示此对象运行时类的 Class 对象。
作者:
最初的理想
时间:
2012-2-15 19:10
学习了!解释的很清楚
作者:
李建锋
时间:
2012-2-15 21:30
二楼说得比较准确,java在编译时期只检查语法错误,即在编译时期无法知道new String().getClass()的返回值是String.class,所以就不可以那样干了,还可以用一下方式搞一下!
package com.itcast.day01;
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) {
Class<String> cl = String.class;// 正确
String s2="asa";
Class<String> cl1 = (Class<String>) s2.getClass(); //在此进行强制转换!
Class<? extends String> cl2 = new String().getClass();// 只能这样
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2