У меня есть интерфейс и реализация:
// there are things
public interface Thing { /* ... */ }
// balls are things
public class Ball implements Thing { /* ... */ }
У меня есть другой интерфейс и другая реализация:
// a dog can fetch any thing
public interface Dog {
public Thing fetch();
}
// a shepherd can fetch only a ball
public class Shepherd implement Dog {
public Ball fetch() { /* ... */ }
}
Это нормально.
Но теперь я хочу использовать Ball
в качестве параметра параметризованного класса:
public interface Dog {
public List<Thing> fetchList();
}
public class Shepherd implement Dog {
public List<Ball> fetchList() { /* ... */ }
}
Java не позволяет мне это делать, говорит, что я пытаюсь использоватьнесовместимый тип.
В то же время эта конструкция работает без каких-либо проблем:
public class Shepherd implement Dog {
public List<Thing> fetchList() { /* ... */ }
}
Почему Java позволяет мне использовать реализацию интерфейса в качестве определения возвращаемого значения, но не 'Позволить мне использовать его как параметр параметризованного класса?
Заранее спасибо!