EDIT : 큰 차이를 만들어내는 데 놓친 또 다른 주름이 여기에 있습니다.이 인터페이스와 메소드에서 Java generics에 대한 잘못된 점은 무엇입니까?
<T extends Bar> T doAnotherThing(List<Foo<T>> foo) {
return foo.get(0).doSomething();
}
무시 그냥 List
가 제네릭 클래스/인터페이스는 사실에 주목하는 List
사실 : doAnotherThing
의 메소드 서명은 다음 대신합니다. 그래서 같은 메서드를 호출하고 있습니다 :
abstract class Bar {
// some neat stuff
}
class BarImpl extends Bar {
// some cool stuff
}
interface Foo<T extends Bar> {
T doSomething();
}
class FooImpl implements Foo<BarImpl> {
BarImpl doSomething() {
// Does something awesome
}
}
이 모든 벌금과 멋쟁이이고 잘 작동 :
doAnotherThing(new ArrayList<FooImpl>);
그래서, 난과 같이 정의 된 클래스 및 인터페이스를 가지고있다.
는 지금, 나는 방법과 같이 있습니다
<T extends Bar> T doAnotherThing(List<Foo<T>> foo) {
return foo.get(0).doSomething();
}
이 방법은 완전히 다른 클래스의 일반적인 방법이며, 상기와 같이 체인의 일부가 아닙니다. 그러나
, 나는 다음과 같은 방법으로이 방법을 사용하려고 할 때, 나는 유형이 일치하지 않다는 오류 받고 있어요 :
doAnotherThing(new FooImpl());
FooImpl
이 Foo<T>
를 구현을, 그래서하지 않습니다 이것이 어떻게 오류인지 확인하십시오. 어쩌면 내가 뭔가를 오해하고있는 것일까 요? 감사합니다
예제에서 BarImpl은 막대를 확장하지 않습니다. – AniDev
그것은 나를 위해 작동합니다. 'BarImpl extends Bar'를 잊었다는 사실 외에도 – Bozho
컴파일러 오류 메시지를 공유 할 수 있습니까? –