考虑这种情况
public abstract class A{
}
public interface B{
}
如何创建扩展A并实现B的对象列表?
List<? extends A implements B> list = new List();
由于
答案 0 :(得分:0)
据我所知,通配符泛型不支持此功能。这可以使用Type generics完成。
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
}
答案 1 :(得分:0)
你也可以使用'&amp;'运算符并将未知类声明为类型参数,如下所示。声明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;
}
}