-1

2 つのオブジェクトを持つ関数を作成したいと思います。2 番目のオブジェクトが null でない場合は 2 番目を返します。それ以外の場合は、最初のオブジェクトを返します (null かどうかは関係ありません。

これが私が思いついたコードです:

public <T> T merge (Class<T> x, Class<T> y){
    if (y!= null) return (T) y;
    else return (T) x;
}

しかし、キャストに関する警告が表示されます: Type safety: Unchecked cast from Class to T

これが正しい書き方なのか、それとももっと良い方法があるのか​​ 疑問に思っています。

渡された 2 つのオブジェクトが同じクラスからのものである場合、2 番目のクラスを返すだけです。クラスとnullの場合もあり、クラスがnullでないものを返したいと思います。両方のクラスが null の場合は、null を返します。

2つの異なるクラスに合格するケースは他にありません。

4

2 に答える 2

5

メソッドを次のように変更します。

public <T> T merge (T x, T y){
    if (y!= null) return y;
    else return x;
}

元のメソッドは「クラス」の型の変数を受け取りますが、型 T のオブジェクトを返します。したがって、コンパイラは型キャストの安全性について警告します。

于 2013-08-09T18:10:17.317 に答える
1

引数リストClass<T>が単にではなく使用されているのはなぜTですか?

Tではなく、のインスタンスを返しますT class

期待どおりの結果が返されないため、コンパイラは警告を発しています。

これが実際の例です:

public <T> T merge (T x, T y){
   if (y != null) {
    return y;
   }
   else {
        T merged = null;
        // TODO merge code
        return merged;
   }
}
于 2013-08-09T18:08:34.107 に答える