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