【问题标题】:how to write a clean code without using enums如何在不使用枚举的情况下编写干净的代码
【发布时间】:2019-06-13 21:14:51
【问题描述】:

我有一个如下的枚举

public enum ProductType{

 P1("Pone")
 P2("Ptwo")

 public String value;

  public String getValue(){
      return value;
  } 

 public Product fromValue(Brand b){
     if(b.equals("A")){
         return P1;
     else
         return P2
     }
}

这就是我的使用方法

Class ABC{

        public String getProductName(Brand b){
           return ProductType.fromValue(b).getName();
      }
}

如何在不使用 ENUM 的情况下达到同样的效果。我希望能够在不使用 ENUM 的情况下从品牌返回 ProductName

【问题讨论】:

  • 如果您提供的代码 sn-p 实际编译,我会感到惊讶,请编辑您的问题,以便我们了解您的要求,阅读这篇关于如何提问的文章:@987654321 @
  • 你为什么讨厌枚举?
  • 你的代码没有意义。让放错位置的{} 放在一边,在if(b.equals("A")) 行中,您正在检查Brand 的实例是否等于String 的实例,这将始终是false。但是当然,你可以在没有 ProductType 类的情况下做同样的事情:public String getProductName(Brand b){ return b.equals("A")? "Pone": "Ptwo"; }

标签: java java-8


【解决方案1】:

不清楚为什么要避免使用枚举,但这里有一个等效的 pre-Java-5 版本。你的代码充满了错误,所以我做了一些假设和更正:

public class ProductType {
    public static final ProductType P1 = new ProductType("Pone");
    public static final ProductType P2 = new ProductType("Ptwo");

    private final String value;

    private Product(String value) {
        this.value = value;
    }

    public String getValue() {
        return this.value;
    }

    public ProductType fromValue(String value) {
        return value.equals(P1.value) ? P1
               value.equals(P2.value) ? P2 : null;
    }
}

【讨论】:

  • 我不想创建对象 ProductType,但可能使用翻译器?
  • 请说明您要做什么以及为什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 2011-02-15
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
相关资源
最近更新 更多