我想创建一个将从枚举返回四种类型之一的方法.因此,如果有人想要SCAN_RANK_GROUPS的过滤器,我如何才能将方法的返回类型设为Rank,或者如果有人想要SCAN_MEMBERS,它将返回Member.我该怎么做呢?
public T scanTemporaryStorage(ScanFilters filter) {
return (T) filter.performOperation();
}
public enum ScanFilters {
SCAN_RANK_GROUPS {
@Override
public Rank performOperation() {
}
},
SCAN_MEMBERS {
@Override
public Member performOperation() {
}
};
public abstract T performOperation();
}
解决方法:
这不可能做到.我的建议是为Rank和Member创建一个超类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
}
并让您的课程扩展它.
public class Rank extends Scannable
public class Member extends Scannable
标签:enums,types,generics,type-conversion,java
来源: https://codeday.me/bug/20191029/1960438.html