3

パラメータをオブジェクトとしてメソッドに設定できるかどうか疑問に思いました。オブジェクトは、あるクラスを拡張し、別のクラスを実装する必要があります。次に例を示します。ClassAというクラスとMyInterfaceというインターフェイスがあるとします。

public class ClassA {
    /* code */
}    


public interface MyInterface {
    /* code */
}

ClassAを拡張し、MyInterfaceを実装するClassBというクラスがどこかにあるとしましょう。

public class ClassB extends ClassA implements MyInterface {
    /* code */
}

ClassAを拡張し、MyInterfaceを実装するClassCを使用することもできます。

public class ClassC extends ClassA implements MyInterface {
    /* code */
}

私の質問はこれです:

method1というメソッドがあり、method1にObjectを受け入れるパラメーターが必要だとします。このオブジェクトをClassAのサブクラスにするか、実際にはClassA自体にする必要があるとします。これは簡単です。

 public void method1(ClassA parameter) {

 }

たとえば、method2も必要であり、method2には、MyInterfaceを実装するものをすべて受け入れるパラメーターが必要だとします。繰り返しますが、これは簡単です。

 public void method2(MyInterface parameter) {

 }

しかし、method3が必要で、ClassAのサブクラスまたはClassA自体であるオブジェクトのみを受け入れ、MyInterfaceを実装するパラメーターが必要で、ClassBとClassCの両方を受け入れるが、ClassAのみを拡張するクラスは受け入れない場合はどうなりますか?またはMyInterfaceのみを実装するか、どちらも実装しません。好き:

public void method3 ([Something that extends ClassA implements MyInterface] parameter) {
  /* code */
}
4

2 に答える 2

18

次のことができます。

public <A extends ClassA & MyInterface> void method3(A parameter) { ... }

しかし、それは良い考えではないと思います。拡張ClassAして実装するオブジェクトの概念がある場合は、MyInterfaceその概念を表すために別のクラスまたはインターフェースを作成する方がよいでしょう。

于 2012-07-12T18:31:09.893 に答える
0

あなたの説明から、あなたは別のタイプのオブジェクトを必要としているように見えます。ClassAを拡張し、MyInterfaceを実装するもの。おそらく、これは抽象クラスです。

次に、この新しいオブジェクトをmethod3のパラメータータイプとして使用します。

于 2012-07-12T18:29:44.987 に答える