I’m having trouble changing the type parameter of an inherited method.
abstract class Animal {
abstract List<Animal> animalList();
}
public class Dog extends Animal {
@Override
public List<Dog> animalList() {
...
...
}
}
public class Cat extends Animal {
@Override
public List<Cat> animalList() {
...
...
}
}
All animal subclasses need to implement a method animalList. What’s the best practice of doing this if i want the best possible code regarding readability and maintainability? Please note that this is extremely simplified i comparison to the actual project.
Advertisement
Answer
I don’t know what the best solution is, but I would do the following:
import java.util.List;
abstract class Animal {
abstract <T extends Animal> List<T> animalList();
}
…
import java.util.List;
public class Dog extends Animal {
@Override
List<Dog> animalList() {
return null;
}
}
…
import java.util.List;
public class Cat extends Animal{
@Override
List<Cat> animalList() {
return null;
}
}