0

2つのクラスA、Bがあるとします。

class A extends SomeClass {
   public String getProp() {
      return "propA";
   }
}

class B extends SomeOtherClass{
   private String propB;

   public B setProp(String value) {
      propB = value;
      return this;
   }

   public String getProp() {
      return propB;
   }
}

Xという別のクラスがあり、このクラスXにこれらのクラスのいずれかを参照するメソッドsomeMethodがあるとします。このメソッドでジェネリックスを使用して、次のオブジェクトに応じてgetProp()を呼び出す方法はありますか。渡されましたか?

4

4 に答える 4

2

ジェネリックを使用していません。

getProp()メソッドを持つこれらのクラスの共通インターフェースを定義できます。次に、それを使用するメソッドは、インターフェイスのインスタンスを受け入れる必要があり、getProp()渡した具象クラスによって実装されるインターフェイスでメソッドを呼び出すことができます。

于 2012-09-30T16:44:11.507 に答える
0

ジェネリックスは、コンパイル時の型安全性を目的としており、実行時のポリモーフィズムを実現するためのものではありません。だから私はあなたが求めていることは可能ではないと思います。

シナリオでは、インターフェースの作成を検討する必要があります。このようなもの:

public interface PropInf{
  String getProp();
}

次に、このインターフェースを両方のクラスに実装する必要があります。このインターフェースの参照変数を使用して、ポリモーフィズムを実現できます。

于 2012-09-30T16:43:43.213 に答える
0

これは答えと見なすことができますが、私はそれが好きではありません..

public class X<T>{
public void someMethod(T t) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
    t.getClass().getMethod("getProp", null).invoke(t, null);
}
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
    X<A> weird = new X<>();
    A a = new A();
    weird.someMethod(a);
}

}

于 2012-10-01T03:27:53.193 に答える
0

を次のように定義interfaceします。

interface StringPropProvider {
  String getProp();
}

次に、そのインターフェイスを実装するクラスを定義します。

class A extends SomeClass implements StringPropProvider {
   public String getProp() {
    return "propA";
}

class B extends SomeOtherClass implements StringPropProvider {
  private String propB;

  public B setProp(String value) {
    propB = value;
    return this;
  }

  public String getProp() {
    return propB;
  }
}
于 2012-09-30T16:46:38.643 に答える