![](/img/trans.png)
[英]How can an interface include a method that references the concrete implementation type of the interface in its signature or return type?
[英]How To Implement A Method Signature That Will Return a Concrete Type of an Enum?
我想创建一个方法,它将从枚举中返回四种类型之一。 因此,如果有人想要SCAN_RANK_GROUPS
的过滤器,我如何获得该方法的返回类型为Rank
,或者如果有人想要SCAN_MEMBERS
,它将返回Member。 我该怎么做呢?
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
创建一个超类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
根据我对Java的理解,唯一的方法是指定所有这些类型共有的返回类型,或者,如果没有通用类型,则返回Object的实例。 然后,您可以使用instanceof来确定返回的类型
编辑:嗯,我不应该说这是唯一的方法
public static enum ExampleEnum
{
A{
@Override
public Integer returnA ()
{
return 42;
}
},
B{
@Override
public String returnB ()
{
return "Foo";
}
}
;
public Integer returnA ()
{
return null;
}
public String returnB ()
{
return null;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.