加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java-使用泛型返回多种类型

发布时间:2020-12-15 04:56:50 所属栏目:Java 来源:网络整理
导读:我有这样的方法 – public ListApples returnFruits(String arg1){ListApples fruits = new ArrayListApples();Apple a = new Apple();fruits.add(a);return fruits;} 我想改变它,以便我可以从方法调用中指定水果类型并返回该水果列表.所以第二个语句应该动
我有这样的方法 –

public List<Apples> returnFruits(String arg1){
List<Apples> fruits = new ArrayList<Apples>();
Apple a = new Apple();
fruits.add(a);

return fruits;
}

我想改变它,以便我可以从方法调用中指定水果类型并返回该水果列表.所以第二个语句应该动态实例化我传递的水果列表.我想到了这个 –

public List<?> returnFruits(String arg1){
List<T> fruits = new ArrayList<T>();
T t = new T();
fruits.add(t);

return fruits;
}

但是你可以看到,不知道正确的方法.

在第二种方法中,我只是返回水果而不是列表 –

public T returnFruit(){
T t = new T();
return t;
}

传递的果实不在同一个类层次结构中,并且是不同的类型.

谢谢.

解决方法

您可以采取多种方法.一种是使用Class< T>.正如其他人所说.另一种方法是创建某种生成器接口,并将其传递给:

public interface FruitProducer<T> {
    T createFruit(String arg);
}

public <T> List<T> returnFruits(String arg,FruitProducer<? extends T> producer) {
    List<T> list = new ArrayList<T>();
    T fruit = producer.createFruit(arg);
    list.add(fruit);
    return list;
}

你有不同水果的不同生产者:AppleProducer实现了FruitProducer< Apple>,OrangeProducer实现了FruitProducer< Orange>等等.这种方法只是踢了一点 – FruitProducer仍然必须以某种方式创造水果 – 但它可能是一个有用的重构.

另一种方法依赖于与FruitProducer方法相同的多态性,方法是使用returnFruits抽象类:

public abstract class FruitLister<T> {
    public abstract List<T> returnFruits(String arg);
}

现在你有了不同的lister:AppleLister实现了FruitLister< Apple>等等.每个人都知道如何实例化它需要在列表中返回的特定类:

public class AppleLister implements FruitLister<Apple> {
    @Override
    public List<Apple> returnFruits(String arg) {
            List<Apple> list = new ArrayList<Apple>();
            Apple apple = new Apple(arg);
            list.add(apple);
            return list;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读