T がジェネリックであると仮定すると、このようなものを機能させる方法はありますか?
public T cast(int n){
T toReturn = (T) n;
return toReturn;
}
T がジェネリックであると仮定すると、このようなものを機能させる方法はありますか?
public T cast(int n){
T toReturn = (T) n;
return toReturn;
}
次のようにすることもできます。これは、常に 3 つの typeのいずれか、またはそのスーパータイプ、またはそのスーパータイプでT toReturn = (T)(Integer)n;
ある限り、コンパイルされ、さらには実行されますが、おそらくあまり役に立ちません。T
Integer
Number
Object
オブジェクトの型キャストは常に同じ参照を与えるため、オブジェクトが実際に持っている型にしかアクセスできません。an を作成しInteger
てから (たとえば) a にキャストすることはできません。これはDouble
、 anInteger
が aDouble
ではなく、オブジェクトの型キャストが新しいオブジェクトを作成しないためです。int から他の型のインスタンスを作成する場合は、その型のインスタンスを明確に作成できるメソッドを呼び出す必要があります。
これは、あなたが望むものに私が考えることができる最も近いものです. あなたは次のようなインターフェースを持っているかもしれません
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);
int
などのプリミティブをオブジェクトに変換することはできません。あなたができる最善の方法は、たとえば、を にボックスint
化することです。Integer
public Integer cast(int n){
Integer toReturn = Integer.valueOf(n);
return toReturn;
}