假设T是通用的,无论如何都可以使这样的东西起作用吗?
public T cast(int n){
T toReturn = (T) n;
return toReturn;
}
答案 0 :(得分:3)
你可以这样做:T toReturn = (T)(Integer)n;
,只要T
始终是三种类型Integer
中的一种,或者它的超类型Number
,它就可以运行,或它的超类型Object
,但它可能不会非常有用。
对象的类型转换将始终为您提供相同的引用,因此它只允许您访问该对象实际具有的类型。您无法创建Integer
,然后将其投放到(例如)Double
,因为Integer
不是Double
,并且对象的类型转换为'创建一个新对象。如果要从int创建其他类型的实例,则必须调用能够专门创建该类型实例的方法。
答案 1 :(得分:1)
您无法将int
等基元转换为对象。您可以做的最好的事情是将int
打包成Integer
,例如:
public Integer cast(int n){
Integer toReturn = Integer.valueOf(n);
return toReturn;
}
答案 2 :(得分:1)
这是我能想到的最接近你想要的东西。您可能有类似
的界面public interface ValueSettable{
void setValue(int value);
}
你可以有一堆实现这个的类,比如这个。
public class FunkyValue implements ValueSettable{
private int value;
public void setValue(int value){
this.value = value;
}
}
然后,你可以写这样的东西。
public static <T implements ValueSettable> T cast(int value, Class<T> toInstantiate){
T toReturn = toInstantiate.newInstance();
toReturn.setValue(value);
return toReturn;
}
当涉及到使用它时 -
FunkyValue funky = cast(47, FunkyValue.class);