2

私は次のようなインターフェースを持っています

パブリック インターフェイス KeyRetriever {

public Object getKey(Object obj);

}

実装を次のようにしたい

CustomerTypeKeyRetriever (実装クラス)

public String getKey(Customer customer) {
    return null;
}

どうすればこれを達成できますか。現在、コンパイル エラーがスローされます - 「型 CustomerTypeKeyRetriever は、継承された抽象メソッド KeyRetriever.getKey(Object) を実装する必要があります」

4

3 に答える 3

4

インターフェイス宣言でジェネリックを使用します。

public interface KeyRetriever<T> {

public Object getKey(T obj);
}

今あなたのサブクラスであなたはそれを実装することができます

 public class CustomerTypeKeyRetriever implements KeyRetriever<String> {
  public String getKey(String str){
        //your implementation

  }
 }
于 2012-11-09T15:55:51.830 に答える
0

Person インターフェイスがあるとしましょう:

public interface Person {}

Customer クラスと Employee クラスは次のことを実装しました。

public class Customer implements Person {/* Your class body */}
public class Employee implements Person {/* Your class body */}

次に、次のようにインターフェイスを変更できます。

public interface KeyRetriever {

public String getKey(Person person);
}

そして、 Customer クラスでは、次のように変更する必要があります:

public String getKey(Person perosn) {
   return null;
}

それが役立つことを願っています。ハッピーコーディング:)

于 2012-11-09T16:04:00.723 に答える
0

実装には次のようなメソッドが必要です

@Override
    public Object getKey(Object obj) {
        // TODO Auto-generated method stub
        return null;
    }

また、すべての実装メソッドに @Override アノテーションを付けて、将来 API が変更された場合にコンパイラがメソッドの変更/競合をキャッチできるようにします。

汎用化されたインターフェイスが必要な場合は、以下が機能するはずです(これが必要だと思います)

public interface KeyRetriever<T> {
    public Object getKey(T obj);
}

public class CustomerTypeKeyRetriever implements KeyRetriever<Customer> {

    @Override
    public String getKey(Customer obj) {
        // TODO Auto-generated method stub
        return null;
    }

}

ここで、Java は共変の戻り値の型をサポートしているため、戻り値の型は Object の任意のサブクラスにすることができます。

于 2012-11-09T15:54:56.730 に答える