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"));}
}

解决方案 »

  1.   

    templ.java:7: 错误: 意外的类型
    a=new A(a1);
          ^
      需要: 类
      找到:    类型参数A
      其中, A是类型变量:
        A扩展已在类 CAB中声明的Object
    templ.java:8: 错误: 意外的类型
    b=new B(b1);
          ^
      需要: 类
      找到:    类型参数B
      其中, B是类型变量:
        B扩展已在类 CAB中声明的Object
    2 个错误
      

  2.   

    a=new A(a1);泛型是不能new的
      

  3.   

    哪个说需要get/set方法的?这里是构造函数好不?3楼的说得对,泛型的时候你是不知道A类B类具体的类型是什么的,那么我假设你自己写了一个类MyClass,没有写带参构造函数,你该怎么办?代换进去就变成了new MyClass(a1),这程序还怎么执行?
    所以对于泛型类只有通过反射获取新实例:
    A a =(A) a1.getClass().getConstructor(a1.getClass()).newInstance(a1);
    看上去有些啰嗦吧,反射都是这样
    因为我们不知道A类具体是什么类(没错,确实不知道,因为在编译时类型擦除了,神都无法知道),
    所以只好从a1中获取A类的类对象(类本身也是属于Class类的一个对象),
    然后再获取这个类中的构造函数,
    但是构造函数可以重载啊,所以我们又要把参数类型(类对象)传入进去,好让它知道我们要哪个签名的。
    好了,现在我们手里拥有这个构造函数了,现在该怎么做?当然是传参调用它咯(即newInstance)
      

  4.   

    呵呵没事,我混CSDN一直都不在乎分数的~~
    不过还是说一下:结帖界面没有提交之前是分配的分数可以改的