我们有一个类似 A<-B<-C<-D<-E<-F
的类结构(B 扩展 A,C 扩展 B 等等)。
我需要创建一个方法acceptList(List<> list)
以这样的方式它可以接受 List
类A,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/