私が使用したいこの提供された機能があります:
boolean check(Comparable<Object> obj1, Comparable<Object> obj2) {
// do something
}
そして、私が持っています:
Object obj1,obj2;
メソッドチェックに送信したい場合、2つのオブジェクトを Comparables にキャストまたは変換するにはどうすればよいですか?
わかりやすかったです、ありがとう。
私が使用したいこの提供された機能があります:
boolean check(Comparable<Object> obj1, Comparable<Object> obj2) {
// do something
}
そして、私が持っています:
Object obj1,obj2;
メソッドチェックに送信したい場合、2つのオブジェクトを Comparables にキャストまたは変換するにはどうすればよいですか?
わかりやすかったです、ありがとう。
あなたが言ったように:
check((Comparable<Object>) obj1, (Comparable<Object>) obj2);
とは言っても、 を実装するクラスは知りませんComparable<Object>
。メソッドは、おそらくComparable<?>
ではなく引数として取る必要がありComparable<Object>
ます。
2 つのオブジェクト参照が真に Comparable オブジェクトを指している場合は、単純に次のようにできます。
check((Comparable<Object>) obj1, (Comparable<Object>) obj2);
-編集-
もちろん、これは警告を生成します。基本的には、コンパイラに自分がよく知っていることを伝えています。obj
コンパイラは、ジェネリック型パラメーターに関してあなたが言ったものではない場合、間違っている可能性があることを警告しています。注釈を使用して、本当に、本当に確信していることをコンパイラに黙らせることができます。
@SuppressWarnings("unchecked")
Comparable<Object> cmp1 = (Comparable<Object>) obj;
@SuppressWarnings("unchecked")
Comparable<Object> cmp2 = (Comparable<Object>) obj;
check(cmp1,cmp2);
注釈を使用する@SupressWarning
場合、通常、安全でないキャストが常に成功することを確信している理由を示すコメントを追加します。
使用しないでください
Object obj1, obj2;
むしろ
Comparable obj1, obj2;
このメソッドに送信するオブジェクトは、 のタイプである必要がありますComparable
。したがって、Comparable
インターフェースを実装する必要があります。
Comparable obj1 = new Comparable() {
// ... realize compare method
}
次に、このオブジェクトを関数に送信できます。
独自のクラスがこのようにインターフェイスを実装している場合:
public class MyClass implements Comparable {
// realize compare method
}