我想创建一个方法,该方法将从枚举中返回四种类型之一。因此,如果有人想要 SCAN_RANK_GROUPS
过滤器,我如何才能使方法的返回类型成为 Rank
,或者如果有人想要 SCAN_MEMBERS
它将返回成员。我该怎么做呢?
public <T> T scanTemporaryStorage(ScanFilters filter) {
return (T) filter.performOperation();
}
public enum ScanFilters {
SCAN_RANK_GROUPS {
@Override
public <Rank> Rank performOperation() {
}
},
SCAN_MEMBERS {
@Override
public <Member> Member performOperation() {
}
};
public abstract <T> T performOperation();
}
最佳答案
这是不可能的。我的建议是为 Rank
和 Member
创建一个父类(super class) Scannable
,并使用它:
public Scannable scanTemporaryStorage(ScanFilters filter) {
return filter.performOperation();
}
public enum ScanFilters {
SCAN_RANK_GROUPS {
@Override
public Scannable performOperation() {
}
},
SCAN_MEMBERS {
@Override
public Scannable performOperation() {
}
};
public abstract Scannable performOperation();
}
父类 Scannable
将拥有所有共享方法:
public abstract class Scannable {
// have all the methods in Rank and Member
}
并让您的类(class)对其进行扩展。
public class Rank extends Scannable
public class Member extends Scannable
关于java - 如何实现将返回枚举的具体类型的方法签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23965922/