Java创建有界的泛型类

示例

您可以通过限制类定义中的类型来限制通用类中使用的有效类型。给定以下简单的类型层次结构:

public abstract class Animal {

    public abstract String getSound();

}

public class Cat extends Animal {

    public String getSound() {

        return "Meow";

    }

}

public class Dog extends Animal {

    public String getSound() {

        return "Woof";

    }

}

如果没有有界的泛型,我们就不能创建既是泛型又知道每个元素都是动物的容器类:

public class AnimalContainer<T> {

    private Collection<T> col;

    public AnimalContainer() {

        col = new ArrayList<T>();

    }

    public void add(T t) {

        col.add(t);

    }

    public void printAllSounds() {

        for (T t : col) {

            // 非法,类型T没有makeSound()

            // 它在这里用作java.lang.Object

            System.out.println(t.makeSound()); 

        }

    }

}

通过类定义中的泛型绑定,现在可以做到这一点。

public class BoundedAnimalContainer<T extends Animal> { // 请注意此处。

    private Collection<T> col;

    public BoundedAnimalContainer() {

        col = new ArrayList<T>();

    }

    public void add(T t) {

        col.add(t);

    }

    public void printAllSounds() {

        for (T t : col) {

            // 现在有效,因为T正在扩展Animal

            System.out.println(t.makeSound()); 

        }

    }

}

这也限制了泛型类型的有效实例化:

// 法律

AnimalContainer<Cat> a = new AnimalContainer<Cat>();

// 法律

AnimalContainer<String> a = new AnimalContainer<String>();

// 法律 because Cat extends Animal

BoundedAnimalContainer<Cat> b = new BoundedAnimalContainer<Cat>();

// 非法,因为String不能扩展Animal

BoundedAnimalContainer<String> b = new BoundedAnimalContainer<String>();

           

以上是 Java创建有界的泛型类 的全部内容, 来源链接: utcz.com/z/321330.html

回到顶部