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

标签 java generics types enums type-conversion

我想创建一个方法,该方法将从枚举中返回四种类型之一。因此,如果有人想要 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();

}

最佳答案

这是不可能的。我的建议是为 RankMember 创建一个父类(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/

相关文章:

java - 泛型 Java 8 上的调用方法

c# - 通用约束和接口(interface)实现/继承

haskell - typeOf 带有类型构造函数 *->*/从程序中打印值的类型

java - 我需要创建 XML-PRC 兼容的 Web 服务

java - 我可以使用哪些技术来帮助更好地理解离散数学中的概念是如何在编程中使用的?

generics - 返回相同的集合类型,不同的参数化

c++ - 如何将类的重载运算符成员作为函数指针传递?

java - 泛型,当扩展子类最终不需要知道类型时强制类型为 Void

java - WatchService.take() 在 Windows-7-x64 上观察远程目录中的更改时不会等待

java - 数组索引上的 Lombok Getter