Java 如何实现将返回枚举的具体类型的方法签名?

Java 如何实现将返回枚举的具体类型的方法签名?,java,generics,types,enums,type-conversion,Java,Generics,Types,Enums,Type Conversion,我想创建一个从枚举返回四种类型之一的方法。因此,如果有人希望筛选SCAN\u RANK\u组,我如何才能将方法的返回类型设置为RANK,或者如果有人希望SCAN\u成员,它将返回成员。我该怎么做呢 public <T> T scanTemporaryStorage(ScanFilters filter) { return (T) filter.performOperation(); } public enum ScanFilters { SCAN_RANK_GRO

我想创建一个从枚举返回四种类型之一的方法。因此,如果有人希望筛选
SCAN\u RANK\u组
,我如何才能将方法的返回类型设置为
RANK
,或者如果有人希望
SCAN\u成员
,它将返回成员。我该怎么做呢

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();

}
公共扫描临时存储(扫描过滤器){
返回(T)过滤器。性能操作();
}
公共枚举扫描筛选器{
扫描组{
@凌驾
公共级别绩效操作(){
}
},
扫盲小组成员{
@凌驾
公共成员绩效操作(){
}
};
公开摘要T性能操作();
}

根据我对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;
    }
}

这样做是不可能的。我的建议是为
Rank
Member
创建一个超类
scanable
,并使用它:

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();

}
父类
scanable
将具有所有共享方法:

public abstract class Scannable {

    // have all the methods in Rank and Member
}
并让您的类扩展它

public class Rank extends Scannable

public class Member extends Scannable

我不太确定这是否可行,因为(我认为)这意味着您将指定返回的是类的实例,而不是类型。。。我不确定这是否合法这是一种非常糟糕的方式。。。使用面向对象创建共享父类或接口。@Anubianob请参见我的第一段。我只是想完成这是一个有效的实现,我只是想让你知道这不是一个好的设计。。。(+1).