我有这段代码:
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;
}
}
但它没有编译......任何想法我如何修复它?
答案 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);