class CAB<A,B>
{
A a;
B b;
public CAB (A a1,B b1)
{
a=new A(a1);
b=new B(b1);
}
}
public class templ
{
public static void main(String[] args)
{
CAB<Integer,String> y=new CAB<Integer,String>(new Integer(1),new String("abc"));}
}
{
A a;
B b;
public CAB (A a1,B b1)
{
a=new A(a1);
b=new B(b1);
}
}
public class templ
{
public static void main(String[] args)
{
CAB<Integer,String> y=new CAB<Integer,String>(new Integer(1),new String("abc"));}
}
解决方案 »
- 关于java多线程的问题。。新人求解答
- java题目,帮忙解决了!!(急~~~)
- 自己写的网络聊天室,怎么让它应用?
- jbuilderx 编译错误:(Internal compiler error: java.lang.NullPointerException.)
- 如何将一个类文件打包?
- 又是几个问题JList XYLayOut applet下
- 关于在java代码中调用本地方法(如何得到所需的dll文件???)
- finalized()问题?
- 用JNDI查找home接口时,该如何写
- 那位大侠有Jbuilder3.5的企业版注册号?谢谢!!!
- 有人用过jxl吗 就解答 修改时出错
- 求大神,关于Socket的问题
a=new A(a1);
^
需要: 类
找到: 类型参数A
其中, A是类型变量:
A扩展已在类 CAB中声明的Object
templ.java:8: 错误: 意外的类型
b=new B(b1);
^
需要: 类
找到: 类型参数B
其中, B是类型变量:
B扩展已在类 CAB中声明的Object
2 个错误
所以对于泛型类只有通过反射获取新实例:
A a =(A) a1.getClass().getConstructor(a1.getClass()).newInstance(a1);
看上去有些啰嗦吧,反射都是这样
因为我们不知道A类具体是什么类(没错,确实不知道,因为在编译时类型擦除了,神都无法知道),
所以只好从a1中获取A类的类对象(类本身也是属于Class类的一个对象),
然后再获取这个类中的构造函数,
但是构造函数可以重载啊,所以我们又要把参数类型(类对象)传入进去,好让它知道我们要哪个签名的。
好了,现在我们手里拥有这个构造函数了,现在该怎么做?当然是传参调用它咯(即newInstance)
不过还是说一下:结帖界面没有提交之前是分配的分数可以改的