首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除此代码示例的重复代码?

如何删除此代码示例的重复代码?
EN

Stack Overflow用户
提问于 2013-02-01 10:11:58
回答 2查看 91关注 0票数 0

给定以下代码:

代码语言:javascript
复制
public interface DTMFKeys {

    public String getKeyStr();

    public static enum Sign implements TahoeDTMFKeys {

        SIGN_1("*1"), SIGN_2("*2"), SING_3("*3"), SIGN_4("*4"), SIGN_5("*5"), SIGN_6(
                "*6"), SIGN_7("*7"), SIGN_8("*8"), SIGN_9("*9");

        private String keyStr;

        private Sign(String keyStr) {
            this.keyStr = keyStr;
        }

        @Override
        public String getKeyStr() {
            return keyStr;
        }
    }

    public static enum Pound implements TahoeDTMFKeys {

        POUND_1("1#"), POUND_2("2#"), POUND_3("3#"), POUND_4("4#"), POUND_5(
                "5#"), POUND_6("6#"), POUND_7("7#"), POUND_8("8#"), POUND_9(
                "9#");

        private String keyStr;

        private Pound(String keyStr) {
            this.keyStr = keyStr;
        }

        @Override
        public String getKeyStr() {
            return keyStr;
        }
    }
}

如何删除重复的代码:

代码语言:javascript
复制
private Sign(String keyStr){
    this.keyStr=keyStr;
}

@Override
public String getKeyStr() {
    return keyStr;
}
EN

回答 2

Stack Overflow用户

发布于 2013-02-01 10:23:34

它的代码不多,所以我不会真的担心重构它。Java枚举不能扩展其他类。避免代码中的重复实际上是关于重复大量复杂的逻辑,而不是getter/setter字段。

如果你真的担心“重复”,你可以完全取消枚举?

代码语言:javascript
复制
public static String getKeyString(int n, char sign) {
  if (n < 0 || n > 9) throw new IllegalArgumentException();
  if (sign == '#') {
    return ""+n+sign;
  else if (sign == '*') {
    return ""+sign+n;
  else {
    throw new IllegalAgumentException()
  }
} 

此外,SING_3的拼写也不正确。

票数 1
EN

Stack Overflow用户

发布于 2013-02-01 10:24:42

移除这些是不可能的,也是不可取的。因为枚举不能从抽象类继承,所以这是不可能的。keyStr是一个私有概念,用于敲击和签名类,这两个类在概念上都是相互独立的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14638662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档