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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |