繁体   English   中英

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

[英]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();

}

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM