利用有限制通配符来提升API的灵活性

在Java中,有限制通配符(bounded wildcard)允许你在泛型中指定一个范围,从而提升API的灵活性。通配符使得你能够编写更通用、适用于多种类型的代码。以下是一个利用有限制通配符提升API灵活性的例子:

假设有一个简单的动物类层次结构:

class Animal {
    // 省略其他属性和方法
}

class Dog extends Animal {
    // 省略其他属性和方法
}

class Cat extends Animal {
    // 省略其他属性和方法
}

现在,考虑一个包含动物的容器类:

import java.util.List;

class AnimalContainer {
    // 将动物添加到容器中
    public void addAnimals(List<? extends Animal> animals) {
        // 执行添加操作
    }

    // 获取容器中的动物
    public void getAnimals(List<? super Animal> output) {
        // 执行获取操作
    }
}

在这个例子中,addAnimals方法使用了有限制通配符 <? extends Animal>,表示该方法可以接受任何继承自Animal的类型的列表。这使得可以将DogCat等子类的列表都传递给该方法,提高了灵活性。

getAnimals方法使用了超类型通配符 <? super Animal>,表示该方法可以接受任何Animal的超类型的列表。这意味着可以将ObjectAnimal等更泛化的类型的列表传递给该方法。

import java.util.ArrayList;
import java.util.List;

public class Example {
    public static void main(String[] args) {
        AnimalContainer container = new AnimalContainer();

        List<Dog> dogs = new ArrayList<>();
        dogs.add(new Dog());
        dogs.add(new Dog());

        List<Cat> cats = new ArrayList<>();
        cats.add(new Cat());
        cats.add(new Cat());

        // 添加狗到容器
        container.addAnimals(dogs);

        // 添加猫到容器
        container.addAnimals(cats);

        // 获取动物到容器
        List<Animal> outputAnimals = new ArrayList<>();
        container.getAnimals(outputAnimals);

        // 可以将结果输出到任何 Animal 或其父类的列表中
    }
}

通过使用有限制通配符,AnimalContainer类的方法变得更加灵活,可以接受不同子类型的动物列表,同时也可以将动物的列表输出到更泛化的类型中。这种方式提高了API的通用性和可重用性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值