のは、私たちは、このようにいくつかのテスト・インタフェース/クラスを持っているとしましょう:Javaの非ジェネリックとしてインタフェースの汎用メソッドを実装できるのはなぜですか?
abstract class Plant {
public abstract String getName();
}
interface Eatable { }
class Apple extends Plant implements Eatable {
@Override
public String getName() {
return "Apple";
}
}
class Rose extends Plant {
@Override
public String getName() {
return "Rose";
}
}
interface Animal {
<T extends Plant & Eatable> void eat(T plant);
}
あなたはAnimal.eat
、制約のある一般的な方法で見ることができます。細かいコンパイル
class Human implements Animal {
@Override
public void eat(Plant plant) {
}
}
:今、私はこのような私のHuman
クラスを持っています。 Eatable
インターフェイスが失われているため、Human.eat
のサイズがAnimal.eat
よりも小さいことがわかります。
Q1:なぜコンパイラはこの不一致について不平を言っていませんか?
Q2:Plant
からPlant&Eatable
ダウングレードした場合は、それがeat(Object plant)
に文句を言う理由は、コンパイラのために許容できるのですか?
使用しているJavaのバージョン。 eclipseでJava 1.8を使用すると、コンパイル時にエラーが発生することがあります。 – Codebender
Intellij IDEAの@ CodeBender Java8。 –
@Codebender私はこれをコンパイルする問題はありません。 https://ideone.com/7xUcZn – flakes