繁体   English   中英

Java Generics创建扩展A类并实现接口B的对象列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM