java泛型<t extends =“”number =“”>

时间:2015-05-05 11:32:36

标签: 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<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;
   }
}

但它没有编译......任何想法我如何修复它?

5 个答案:

答案 0 :(得分:3)

你无法使用Short构建int(没有这样的构造函数),你可以强制转换为T

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

答案 1 :(得分:0)

因为您的返回类型是通用的T而不是短的。所以你会得到类型不匹配。

答案 2 :(得分:0)

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

而不是:

public T get() {

声明为:

public Number get () {

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

 Short s = new Short(13); //The constructor Short(int) is undefined

解决方法

Short s = new Short((short) 13);

你的案子

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