は、次のコードを考えてみてください:2つのオブジェクトが同じだが不明なクラスであることをコンパイラに伝えるにはどうすればよいですか?
public class MyClass {
public static void main(String[] args) {
Object o1 = getObject(Math.random());
Object o2 = getObject(Math.random());
if (o1.getClass().equals(o2.getClass()) { // two Cars or two Apples
Comparable c1 = (Comparable) o1;
Comparable c2 = (Comparable) o2;
int x = c1.compareTo(c2); // unsafe
System.out.println(x);
)
}
public Object getObject(double d) { // given method that may not be changed
if (d < 0.5) return (new Car()); // Car implements Comparable<Car>
else return (new Apple()); // Apple implements Comparable<Apple>
}
}
(クラスCat
とApple
与えられた)コードは動作しますが、私はジェネリックなしcompareTo
を使用しているため、コンパイラは、安全でない操作のために警告します。しかし、c1
とc2
が同じであるが不明なタイプ(if
句)であることを指定する方法がわからないため、これを修正する方法はわかりません。これを修正する方法はありますか(もちろん@SuppressWarnings
を使用しています)?
私はここに似たような質問があることを知っています:How to tell Java that two wildcard types are the same? しかし答えは質問者の文脈に固有のようです。たとえば、自分のコンテキストに存在しないキー値マップを使用します。
それは一例だと、あなたは、このコードを見れば、彼はラッパークラスInteger型のインスタンスであり、彼がこれを理解している場合、彼は他のチェックoffcouseできるint型を比較していますインスタンスも同様です。これは彼のタイプをチェックせずにintに値をassinしようとしていたので、彼の警告を削除する必要があります。 –
はい私はプロローグbtwに何かを書いていました。ありがとう、私はそれを編集します。 –