简体   繁体   English

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

[英]Java Generics create list of objects which extends class A and implements interface B

Consider this scenario 考虑这种情况

public abstract class A{

}

public interface B{

}

How would I create a List of objects which extend A and implement B? 如何创建扩展A并实现B的对象列表?

List<? extends A implements B> list = new List();

Thanks 谢谢

As i know, this is not supported with wildcard generics. 据我所知,通配符泛型不支持此功能。 This can be done with Type generics. 这可以使用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
}

You can also use '&' operator and declare the unknown class as a type parameter like below. 您还可以使用'&'运算符并将未知类声明为类型参数,如下所示。 The advantage of this vs declaring a class XXX extends B implement A is that your code will work with any such a class that satisfy the constraints not just XXX descendants. 这与声明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.

相关问题 Java-定义扩展类A和实现接口B的成员 - Java - Defining a member that extends class A and implements interface B 在java中扩展类并实现接口 - extends class and implements interface in java Java:如何创建一个泛型类,它需要一个扩展类并实现接口的数据类型? - Java: how to create a generic class that requires a data type which extends a class and implements an interface? Class C 实现接口 B 扩展接口 A,你能说 C 实现 A 吗? - Class C implements interface B which extends interface A, can you say C implements A? 如何创建可扩展类并实现接口的通用Java类? - how to create generic java class that extends class and implements interface? 是否等于Java类中的实现,该类实现了扩展Iterable的接口? - Equals implementation in a java-class which implements an interface that extends Iterable? 返回扩展Enum和implements和Interface-Java的泛型类 - Return generic class which extends Enum and implements and Interface-Java Java Generics - 实现和扩展 - Java Generics - implements and extends 实现接口z的扩展类y的java类x也应该实现接口z - Should a java class x that extends class y, which implements interface z, also implement interface z java,泛型 - 如何使用类型T对类进行参数化,其中BOTH:扩展并实现某些类型 - java, generics - how to parametrize a class with a type T which BOTH: extends and implements sth
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM