Class<?> cls = Class.forName("com.code.Test"); 这个?怎么具体化,因为Test类是运行时动态加载的,所以我想不到办
Class<?> cls = Class.forName("com.code.Test"); 这个?怎么具体化,因为Test类是运行时动态加载的,所以我想不到办法让泛型具体化. 不具体化也不影响我的使用,只是我想看看有没有什么方法可以具体化。
[解决办法]
转型
[解决办法]
Class cls = Test.class;//得到当前类对应的Class
Test test = (Test)cls.forName();//此方法返回值为Object,可向下转型为Test对象
[解决办法]
cls.newInstance().getClass();是那个的真正的类型,不是太明白楼主的意思。
[解决办法]
LZ的意思是将?替换成具体的class类型,这个明显不可能具体到test啊,既然你说是运行时动态装载的Test,那编译的时候恐怕还不知道Test吧;怎么可能具体?顶多就只能指定到它的super class,如果还不知道,就一直上溯到Object吧,呵呵
[解决办法]
// 如果要类的实例Object instance = cls.newInstance();Test test = (Test)instance;// ....
[解决办法]
如果编译期 com.code.Test 类不存在
要在代码中直接把 cls 用作 Class<com.code.Test>, 应该不行的吧
[解决办法]
不用头疼了,完全不可能“具体化”。
Java的泛型完全是编译期特性,运行期才知道的类型,肯定不能在编码的时候就得到。
除非,你用啥技术运行期生成Java源代码并编译,不过这就没有意义了,因为泛型是为了简化编码。
[解决办法]
楼主的意思可能是,装入时自己也没法知道具体是什么类,因此无法强制转型。
但是没强制转型的话,就没法使用方法属性之类。
如果是如上问题的话,可能有以下解决办法:
1、使用反射的getMethod,getField等办法操作未知类,但是这样throws会很恶心
2、尽量在前期制作未知类时指定统一的接口或者基类
[解决办法]
已经知道动态加载的类型,根本就不须要设计成泛型了.
如果要?具体就用超类型限定: <? super TestFather> 加载的Class只能是TestFather子类.
使用泛型机制编写的程序代码要比那些杂乱地使用Object变量,然后再进行强制类型转换的代码具用更好的安全性和可读性.
[解决办法]
所以都是先定义一个接口,定义了程序中需要的功能接口,然后数据库中保存的实现类。然后在程序中转换成接口调用其中的方法
如果只是一般的JavaBean,那么也可以通过Introspector.getBeanInfo(...).getPropertyDescriptors()返回有哪些属性
[解决办法]
Class<T> 看上去似乎没有任何意义,不知道为什么一定要加个 <T>,也不知道是否有代码中用到了类似楼主的需求 。