Я экспериментирую с генериками Java. Я понимаю, что с помощью дженериков Java мы можем создавать класс и методы, которые относятся только к определенным типам. Это позволяет обнаружить ошибку программирования во время компиляции.
Мой вопрос может показаться странным. Зачем использовать E extends Superclass
вместо Superclass
? Пожалуйста, ознакомьтесь с приведенным ниже кодом.
class Hunter <E extends Animal>{}
class Keaper <Animal>{}
/*edit: as AR.3 and other pointed out, Keaper<Animal> is the same as Keaper<E>.
Animal is just a type parameter here*/
class Animal{}
class Cat extends Animal{}
class Dog extends Animal{}
public class TestGeneric {
public static void main(String[] args) {
Hunter<Cat> hunter1 = new Hunter<>();
Hunter<Dog> hunter2 = new Hunter<>();
Hunter<Animal> hunter3 = new Hunter<>();
ArrayList<Hunter> hunters= new ArrayList<>();
hunters.add(hunter1);
hunters.add(hunter2);
hunters.add(hunter3);
Keaper<Cat> keaper1 = new Keaper<>();
Keaper<Dog> keaper2 = new Keaper<>();
Keaper<Animal> keaper3 = new Keaper<>();
//Edit: as AR.3 and others pointed out, Keaper<String> is also legal here.
ArrayList<Keaper> keapers= new ArrayList<>();
keapers.add(keaper1);
keapers.add(keaper2);
keapers.add(keaper3);
}
}
Я чувствую, что E extends Animal
почти такой же, как Animal
, за исключением того, что первый может предоставить дополнительную информацию. Любая идея?