0

私が使用したいこの提供された機能があります:

boolean check(Comparable<Object> obj1, Comparable<Object> obj2) {
   // do something
}

そして、私が持っています:

Object obj1,obj2;

メソッドチェックに送信したい場合、2つのオブジェクトを Comparables にキャストまたは変換するにはどうすればよいですか?

わかりやすかったです、ありがとう。

4

4 に答える 4

4

あなたが言ったように:

check((Comparable<Object>) obj1, (Comparable<Object>) obj2);

とは言っても、 を実装するクラスは知りませんComparable<Object>。メソッドは、おそらくComparable<?>ではなく引数として取る必要がありComparable<Object>ます。

于 2012-05-28T20:51:28.450 に答える
3

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場合、通常、安全でないキャストが常に成功することを確信している理由を示すコメントを追加します。

于 2012-05-28T20:50:37.373 に答える
2

使用しないでください

Object obj1, obj2;

むしろ

Comparable obj1, obj2;
于 2012-05-28T20:50:45.473 に答える
0

このメソッドに送信するオブジェクトは、 のタイプである必要がありますComparable。したがって、Comparableインターフェースを実装する必要があります。

Comparable obj1 = new Comparable() {
    // ... realize compare method
}

次に、このオブジェクトを関数に送信できます。

独自のクラスがこのようにインターフェイスを実装している場合:

public class MyClass implements Comparable {
    // realize compare method
}
于 2012-05-28T21:11:27.700 に答える