加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

一个带有enum的java方法类

发布时间:2020-12-15 04:51:20 所属栏目:Java 来源:网络整理
导读:我有一个看起来像的枚举 public enum MyEnum{ myValue { @Override public String myMethod(String dostuff) { return dostuff + "One"; } },myOtherValue { @Override public String myMethod(String dostuff) { return dostuff + "Two"; } },aThirdValue {
我有一个看起来像的枚举

public enum MyEnum
{
  myValue
  {
    @Override
    public String myMethod(String dostuff)
    {
      return dostuff + "One";
    }
  },myOtherValue
  {
    @Override
    public String myMethod(String dostuff)
    {
      return dostuff + "Two";
    }
  },aThirdValue
  {
    @Override
    public String myMethod(String dostuff)
    {
      return dostuff + "Three";
    }
  };

  public abstract String myMethod(String dostuff);
}

现在我想我们都同意这看起来很糟糕?
但是更好的方式是什么?我可以有一个abstractfactory,但后来我需要三个实现类,每个实现类作为一行方法.不要觉得这么漂亮.我可以使用开关(在代码或枚举中).但后来我忘了添加一个案例.

那么,最后的路是什么?必须有一个模式,但似乎找不到一个.
到目前为止,最好的香港专业教育学院提出的意见是添加评论自动崩溃Netbeans中的方法,也不是那么精彩.

解决方法

这很丑陋,但解决这个问题的非平凡扩展的大多数解决方案只会让丑陋的事情发生变化.

例如,您可以将三种不同的行为封装在某个接口的三个不同实现中,然后将不同的行为实现传递给每个枚举的构造函数. (这基本上是其他人建议的命令或战略方法).

如果您进行这些实现,并且接口是单独的类,那么您可能会将该行为暴露在枚举之外,这是不必要的并且可以说是丑陋的.

如果你将它们作为枚举的私有静态内部类,你就会将丑陋从文件顶部移动到文件的底部.在旁观者的眼中,这是多么少丑陋.

public enum Foo {

    ONE(new OneDelegate()),TWO(new TwoDelegate()),THREE(new ThreeDelegate());

    // ////////////////////
    // Private stuff

    private final FooDelegate delegate;

    private Foo(FooDelegate delegate) {
        this.delegate = delegate;
    }

    // ////////////////////
    // Public methods

    public String doStuff(String stuff) {
        return delegate.doStuff(stuff);
    }

    // ////////////////////
    // Helper classes

    private static interface FooDelegate {
        String doStuff(String stuff);
    }

    private static class OneDelegate implements FooDelegate {
        @Override
        public String doStuff(String stuff) {
            return "One " + stuff;
        }
    }

    private static class TwoDelegate implements FooDelegate {
        @Override
        public String doStuff(String stuff) {
            return "Two " + stuff;
        }
    }

    private static class ThreeDelegate implements FooDelegate {
        @Override
        public String doStuff(String stuff) {
            return "Three " + stuff;
        }
    }
}

另一个明显的解决方案是将所有三种行为放在私有方法中,并在公共方法中放置一个开关(this).就我个人而言,我认为这是罪恶,但很多前C程序员似乎都喜欢它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读