java - 如何在java中的泛型中给出And条件

标签 java

我们有一个类似 A<-B<-C<-D<-E<-F 的类结构(B 扩展 A,C 扩展 B 等等)。

我需要创建一个方法acceptList(List<> list)以这样的方式它可以接受 ListA,C,E并且不接受 B,D,F 的列表.

这个问题是我在面试时被问到的。

最佳答案

像这样的一些技巧可能会起作用,请记住,接口(interface)总是会打败反射......因此,如果您可以直接在接口(interface)中实现这些类型相关的函数,那么就这样做。

首先是类的实现:

public class A {

public boolean isAcceptable() {
    return true;
}

static class B extends A {

    @Override
    public boolean isAcceptable() {
        return !super.isAcceptable();
    }
}

static class C extends B {
    @Override
    public boolean isAcceptable() {
        return !super.isAcceptable();
    }
}

static class D extends C {
    @Override
    public boolean isAcceptable() {
        return !super.isAcceptable();
    }
}

static class E extends D {
    @Override
    public boolean isAcceptable() {
        return !super.isAcceptable();
    }
}

static class F extends E {
    @Override
    public boolean isAcceptable() {
        return !super.isAcceptable();
    }
}

}

然后你的acceptList(~):

public static boolean acceptList(List<? extends A> list){
    for (A a : list) {
        if(!a.isAcceptable()){
            return false;
        }
    }
    return true;
}

关于java - 如何在java中的泛型中给出And条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18485679/

相关文章:

java - java中的多维 vector 问题

java - 为什么我无法从executeQuery obj 中按整数访问列数据?

java - 使用 taskan 的 java-skype api 在 Java 中发送 Skype 消息

java - 为什么这些代码块不给出相同的结果?

java - 从 firebase 检索图像时出错

java - 如何从这个 JSONString 解析?

java - 我如何使用按钮更改 javafx 中的图像

java - Intellij 中的调用树

java - 打开使用 POI API 创建的文件时 Excel 被损坏

java - yarn 上的 Spark ,在/0.0.0.0 :8032 连接到 ResourceManager