Oto przykład jakiegoś kodu pracuję nad:Java rodzajowych - Oczekiwany rodzaj powrotu inny niż rzeczywisty
public interface FooMaker<T extends Enum<T> & FooType>
{
public List<Foo<T>> getFoos(String bar);
}
Chodźmy dalej zakładać, że będzie wiele różnych konkretne implementacje FooMaker. Napisałem więc kod do wykorzystania FooMakers.
FooMaker<?> maker = Foos.getRandomMaker();
List<Foo<?>> fooList = maker.getFoos("bar"); //error here!
Druga linia kodu powoduje problem, zaćmienie mówi mi, że kod powinien być:
FooMaker<?> maker = Foos.getRandomMaker();
List<?> fooList = maker.getFoos("bar");
mam problemy ze zrozumieniem, dlaczego deklaracja Foo jako sparametryzowane typu w liście musi odejść z dala, aby typ zwrotu był poprawny.
Wszelkie pomysły?
Co oznacza "T extum Enum & FooType"? T musi być enum i rozszerzyć FooType, ale nie można rozszerzyć enum! –
W przypadku generycznych słów kluczowych słowo "rozszerza" służy do opisu zaimplementowanych interfejsów. FooType jest również interfejsem i nadal używasz słowa kluczowego extends. – Nick