假设 T 是通用的,是否有这样的东西可以工作?
public T cast(int n){
T toReturn = (T) n;
return toReturn;
}
你可以这样做: T toReturn = (T)(Integer)n;
,只要它T
始终是三种类型之一Integer
,或者它的超类型Number
,或者它的超类型之一,它就会编译,甚至会运行Object
,但它可能不是很有用。
对象的类型转换将始终为您提供相同的引用,因此它只能让您访问对象实际具有的类型。您不能创建 anInteger
然后将其转换为(例如) a Double
,因为 anInteger
不是 a Double
,并且对象的类型转换不会创建新对象。如果要从 int 创建某种其他类型的实例,则必须调用能够专门创建该类型实例的方法。
您不能将诸如 an 之类的基元转换为int
对象。您可以做的最好的事情是将其装箱int
,Integer
例如:
public Integer cast(int n){
Integer toReturn = Integer.valueOf(n);
return toReturn;
}
这是我能想到的最接近你想要的东西。你可能有一个类似的界面
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);