Как можно написать followup to this question, можно ли написать один метод, который добавит Dog
в подходящую комнату? (В этом примере он принял бы либо комнату Animal
, либо комнату Dog
.) Или я вынужден написать два разных метода, как показано ниже? (Я даже не могу полагаться на перегрузку из-за стирания типа).Можно ли написать один метод, который принимает общий параметр переменной абстракции?
public class Rooms {
interface Animal {}
class Dog implements Animal {}
class Room<T> {
void add(T t) {}
}
void addDogToAnimalRoom(Room<Animal> room) {
room.add(new Dog());
}
void addDogToDogRoom(Room<Dog> room) {
room.add(new Dog());
}
}
Oh * это * какой super для :) –
Yep! Вы используете «Список» в качестве потребителя, так как он принимает нового Собака, поэтому применяется знаменитое сокращение POSS Джоша Блоха. –
Это опасность программирования обучения. Я «читал» его книгу, но только те части, которые были актуальны в то время. Я думаю, что понимание этого могло бы избавить меня от ненужного рефакторинга. Пожалуйста, не стесняйтесь предлагать (или просто редактировать) лучший заголовок вопроса. –