0

我需要为我的应用程序创建一个元素存储库。

这是我创建的课程。

public class Elements
{
  public enum Type1
  {
    A    ("text1"),
    B    ("text2"),
    C    ("text3"),
    D    ("text4"),
    E    ("text5");

    private String identifier;

    Type1(String identifier)
    {
      this.identifier = identifier;
    }

    getPath()
    {
      String path = "";
      //do something
      return path;
    }
  }
}

现在我可以使用Elements.type1.A.getPath();

我对 Elements.type1 进行了静态导入,我想删除 getPath() 的使用,因为它会使我的代码复杂化。IE。我需要能够使用type1.A.

所以我做了,

public class Elements
{
  public enum Type1
  {
    A
      {
        public String toString()
        {
          return getPath("text1");
        }
      },
    B
      {
        public String toString()
        {
          return getPath("text2");
        }
      },
    C
      {
        public String toString()
        {
          return getPath("text3");
        }
      };

    Type1() {}
  }
}

现在我可以使用Elements.Type1.A打印语句,但我有一个接受字符串作为参数的方法。

这样就可以了Elements.Type1.A.toString()。如果没有 toString(),它会引发错误。

有没有办法摆脱toString()

编辑:新代码

public Interface Type1 
{
   String A = "text1";
   String B = "text2";
   String C = "text3"; 
}
public class Utility 
{
   public static void main(String[] args) 
   {
     getPath(Type1.A); 
   }
   public static void getPath(String arg) 
   { 
    //Constructs xpath - text1 changes to //*[contains(@class,'text1')] 
    return xpath; 
   } 
} 
public class myClass 
{
   public void doSomething() 
   {
     assertEquals(Type1.A,xpath); 
   } 
}

在这里,Type1.A 返回 "text1" 而不是 //*[contains(@class,'text1')]

4

2 回答 2

3

看来您需要三个字符串常量而不是枚举。

public static final String A = "test1";
public static final String B = "test2";
public static final String C = "test3";

使用界面并不总是最好的,但如果没有进一步的上下文,我无法提出更好的建议

public interface Type1 {
    String A = "test1";
    String B = "test2";
    String C = "test3";
}
于 2012-10-10T05:52:44.493 回答
3

好吧,Peter如前所述,您在这里需要final static变量..

看起来,就像您想要一组String Constants可以使用..那么您绝对应该使用Peter引用的内容..

只是为了扩展他所说的内容,您可以创建一个接口,并在其中包含所有字符串常量。然后您可以通过Interface名称轻松访问它们。

public Interface Type1 {
    String A = "text1";
    String B = "text2";
    String C = "text3";
}

在你的其他班级的某个地方: -

public class Utility {
    public static void main(String[] args) {

        // You can pass your String to any method..
        String a = Type1.A;

        getPath(a);
        getPath(Type1.B);          

    }

    // This method is not doing work according to its name..
    // I have just taken an example, you can use this method to do what you want.
    public static void getPath(String arg) {
        // You can process your string here.
        arg = arg + "Hello";
    }
}

toString()您还可以根据需要更改退货内容。

并遵循Java Naming Convention..枚举,类以Uppercase字母开头..

于 2012-10-10T05:58:56.293 回答