ここに私のコードです。私は、共通の機能を定義する基本インターフェースを持っています。ジェネリックとインターフェイスを実装し、両方のメソッドが同じ消去を持っています
interface BaseInterface<T> {
void baseFunc(T param)
}
interface MyInterface1 extends BaseInterface<MyEntity1> {
void func1()
}
interface MyInterface2 extends BaseInterface<MyEntity2> {
void func2()
}
そして、私のクラスは次のとおりです。
abstract class BaseClass implements BaseInterface<T> {
// ...some common things
}
class ClassA extends BaseClass implements MyInterface1 {
@Override
public void func1() {...}
@Override
public void baseFunc(MyEntity1 param) {...}
}
class ClassB extends BaseClass implements MyInterface2 {
@Override
public void func2() {...}
@Override
public void baseFunc(MyEntity2 param) {...}
}
別のクラス別の豆MyEntity1とMyEntity2で同じことを行うために行います。だからgenericFでbaseFunc()を定義しました
しかし、ここに問題があります。 "両方のメソッドが同じ消去を持っているにもかかわらず、他のbaseFunc(T)およびbaseFunc(MyEntity1)をオーバーライドしません..."
この問題をスローするには?
ところで、ジェネリックを削除して、baseFuncをMyInterface1とMyInterface2に移動すると正常に動作します。しかし、私はそれが最良の方法だとは思わない。 T
は実際のクラスでない限り
「抽象クラスBaseClassはBaseInterfaceを実装しています。」の何かが間違っています。 「T」とは何ですか? –
shmosel
そうですね、私は自分のコードを見直して、これを見つけました。抽象クラスBaseClassのはがにClassAはClassBのは、BaseClassのを拡張BaseClassのクラスを拡張BaseInterface クラスを実装する抽象クラスBaseClassのにBaseInterface 変更を実装 –
@OscarZhang私はあなたのコメントに気づい前に申し訳ありませんが、私は私の答えを入力しました。それはあなたのために働いたのですか?もしそうなら、あなたはあなたのコメントを回答に変換することができます。その場合、私は私のものを削除します。あなたのコメントと私の答えは基本的に同じことを言っているからです。 –