小编pjm*_*m56的帖子

什么是泛型的正确使用解决了这个编译错误?

重复使用前面的例子,想象一个动物园,动物园管理员必须"处理"新到达的动物(考虑将它们检入动物园).每只动物的登记过程取决于其类别分类(哺乳动物,鸟类等).

这些过程因分类学课程之间的根本差异而不同 - 例如,鸟类有翅膀,哺乳动物有牙齿.您可能还有一些过程的共享位对所有动物都适用,但我在这里省略了它们.

这是代码:

Animal.java

public interface Animal {

    public AnimalProcessor<? extends Animal> getAnimalProcessor();
}
Run Code Online (Sandbox Code Playgroud)

Mammal.java

public abstract class Mammal implements Animal {

    @Override
    public AnimalProcessor<Mammal> getAnimalProcessor() {

        return new MammalProcessor();
    } 

    // Specific to mammals
    public abstract int getToothCount();

}
Run Code Online (Sandbox Code Playgroud)

Bird.java

public abstract class Bird implements Animal {

    @Override
    public AnimalProcessor<Bird> getAnimalProcessor() {

        return new BirdProcessor();
    }

    // Specific to birds
    public abstract float getWingspan();
}
Run Code Online (Sandbox Code Playgroud)

AnimalProcessor.java

public interface AnimalProcessor<T extends Animal> {

    public void process(T critter);
} …
Run Code Online (Sandbox Code Playgroud)

java oop generics design-patterns

4
推荐指数
1
解决办法
244
查看次数

标签 统计

design-patterns ×1

generics ×1

java ×1

oop ×1