[英]Java Generics create list of objects which extends class A and implements interface B
考虑这种情况
public abstract class A{
}
public interface B{
}
如何创建扩展A并实现B的对象列表?
List<? extends A implements B> list = new List();
谢谢
据我所知,通配符泛型不支持此功能。 这可以使用Type泛型来完成。
public abstract class A{}
public interface B{}
public class Match extends A implements B{}
public class NotMatch1 implements B{}
public class NotMatch2 extends A{}
public class MyChecketList<T extends A&B> extends ArrayList<T>{}
public void use(){
List<Match> a = new MyChecketList<>();//valid
List<NotMatch1> b = new MyChecketList<>();//compiler error
List<NotMatch2> c = new MyChecketList<>();//compiler error
MyChecketList<Match> d = new MyChecketList<>();//valid
MyChecketList<NotMatch1> e = new MyChecketList<>();//compiler error
MyChecketList<NotMatch2> f = new MyChecketList<>();//compiler error
}
您还可以使用'&'运算符并将未知类声明为类型参数,如下所示。 这与声明class XXX extends B implement A
的优点是,您的代码将适用于任何满足约束而不仅仅是XXX
后代的类。
import java.util.*;
interface A {};
class B {};
class Test {
public <T extends B & A> List<T> asList(Collection<T> elements) {
List<T> result = new ArrayList<>(elements.size());
for (T element : elements) result.add(element);
return result;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.