将int转换为通用可能吗?

时间:2013-11-05 05:02:17

标签: java

假设T是通用的,无论如何都可以使这样的东西起作用吗?

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

3 个答案:

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