I’m having trouble changing the type parameter of an inherited method.
JavaScript
x
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:
JavaScript
import java.util.List;
abstract class Animal {
abstract <T extends Animal> List<T> animalList();
}
…
JavaScript
import java.util.List;
public class Dog extends Animal {
@Override
List<Dog> animalList() {
return null;
}
}
…
JavaScript
import java.util.List;
public class Cat extends Animal{
@Override
List<Cat> animalList() {
return null;
}
}