1

假设 T 是通用的,是否有这样的东西可以工作?

public T cast(int n){
 T toReturn = (T) n;
 return toReturn;
}
4

3 回答 3

3

你可以这样做: T toReturn = (T)(Integer)n;,只要它T始终是三种类型之一Integer,或者它的超类型Number,或者它的超类型之一,它就会编译,甚至会运行Object,但它可能不是很有用。

对象的类型转换将始终为您提供相同的引用,因此它只能让您访问对象实际具有的类型。您不能创建 anInteger然后将其转换为(例如) a Double,因为 anInteger不是 a Double,并且对象的类型转换不会创建新对象。如果要从 int 创建某种其他类型的实例,则必须调用能够专门创建该类型实例的方法。

于 2013-11-05T05:18:36.170 回答
1

您不能将诸如 an 之类的基元转换为int对象。您可以做的最好的事情是将其装箱intInteger例如:

public Integer cast(int n){
    Integer toReturn = Integer.valueOf(n);
    return toReturn;
}
于 2013-11-05T05:08:28.790 回答
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);
于 2013-11-05T05:17:24.527 回答