java泛型<;T扩展数字>;

java泛型<;T扩展数字>;,java,generics,Java,Generics,我有以下代码: public class Test<T extends Number>{ public static void main(String[] args){ Test<Short> test = new Test(Short.class); System.out.println(test.get()); } private Class<T> clazz; public Test(Class<

我有以下代码:

public class Test<T extends Number>{
   public static void main(String[] args){
       Test<Short> test = new Test(Short.class);
       System.out.println(test.get());
   }
   private Class<T> clazz;
   public Test(Class<T> clazz){
      this.clazz=clazz;
   }
   public T get(){
      if(clazz == Short.class)
          return new Short(13); //type missmatch cannot convert from Short to T
      else return null;
   }
}
公共类测试{
公共静态void main(字符串[]args){
测试=新测试(短类);
System.out.println(test.get());
}
私人课堂;
公开考试(课堂){
this.clazz=clazz;
}
公共部门得不到{
if(clazz==Short.class)
返回新的Short(13);//类型missmatch无法从Short转换为T
否则返回null;
}
}

但它不编译。。。知道我该如何修复它吗?

因为您的返回类型是generic
T
而不是Short。因此您将得到类型不匹配。

您不能用
int
构造
Short
(没有这样的构造函数),您可以像这样强制转换为
T

public T get() {
    if (clazz == Short.class)
        return (T) Short.valueOf((short) 13);
    else
        return null;
}

代码中的构造类型看起来更适合于非泛型实现:

而不是:

public T get() {
声明如下:

public Number get () {

即使您在下面写,编译器也会抱怨

 Short s = new Short(13); //The constructor Short(int) is undefined
变通办法

Short s = new Short((short) 13);
你的案子

 return (T) new Short((short) 13);

仅供参考,您将收到未经检查的演员阵容警告。您认为一段没有任何进一步解释的代码就构成了一个很好的答案吗?是的,因为它将满足以下要求:嗯,根据这个网站的标准。。。一个好的答案还有很多();-)
 return (T) new Short((short) 13);