我必须做一些类似于粘贴代码的事情,我有两个选择。在类定义中具有泛型的一个(结果有一些警告)和以下一个。
由于类型擦除,我无法用后代的实现覆盖基本方法。
您认为这是一种正确且安全的方法吗?
public class Main {
public static void main(String args[]) {
List<Animal> animals = Arrays.asList(new Dog(), new Cat(), new Dog());
Map<Class<? extends Animal>, SoundPrinter> printers = new HashMap<Class<? extends Animal>, SoundPrinter>();
printers.put(Dog.class, new SoundDogPrinter());
printers.put(Cat.class, new SoundCatPrinter());
for (Animal animal:animals){
SoundPrinter printer = printers.get(animal.getClass());
System.out.println(printer.print(animal));
}
}
}
class Animal {
public String sound() {
return "animal sound";
}
}
class Dog extends Animal {
public String sound() {
return "dog sound";
}
}
class Cat extends Animal {
public String sound() {
return "cat sound";
}
}
abstract class SoundPrinter {
public <T extends Animal> String print(T animal) {
return "basic: " + animal.sound();
}
}
class SoundDogPrinter extends SoundPrinter {
public String print(Dog dog) {
return "dog's processed sound: " + dog.sound();
}
}
class SoundCatPrinter extends SoundPrinter {
public String print(Cat dog) {
return "cat's processed sound: " + dog.sound();
}
}