2017-02-21 12 views
2

次のコードでは、「未チェックまたは安全でない操作」の警告が表示されます。Objectoを入力して、警告を出さずにTに入力するにはどうすればよいですか?私は警告を抑えることができることを知っていますが、私は正しい方法を知りたいです。ジェネリック型にキャストするにはどうすればよいですか?

public class MyType<T> { 
    T cast(Object o) { 
     return (T)o; //<--- what causes the warning 
    } 
} 
+0

のようにそれを使用し、安全なタイプではないので、はい、あなたはそれが安全で入力していないという警告を取得するつもりです。 –

答えて

8

Type erasure。あなたは引数としてClass<T>を渡すことができ、それを使用します。同様に、

T cast(Class<T> cls, Object o) { 
    return cls.cast(o); 
} 

またはさえ

public class MyType { 
    public static <T> T cast(Class<T> cls, Object o) { 
     return cls.cast(o); 
    } 
} 

あなたはまた

int t = MyType.cast(Integer.class, 10); 

よう

を呼び出すことができますが、同じ行に、あなたは、コンストラクタでClassを渡すことができましたlike

public class MyType<T> { 
    public MyType(Class<T> cls) { 
     this.cls = cls; 
    } 

    private Class<T> cls; 

    T cast(Object o) { 
     return cls.cast(o); 
    } 
} 

そして、あなたは何をやっている

MyType<Integer> myType = new MyType<>(Integer.class); 
int t = myType.cast(10); 
+0

こんにちはElllioittどのようにクラスを引数として渡しますか?具体的な例を教えていただけますか? – Tania

+0

'String foo = cast(String.class、" foo ");' – Izruo

+0

@Taniaどのようにキャストメソッドを必要としますか? MyTypeはどのコンテキストで使用されるのですか? –

関連する問題