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()の使用を削除したいと思います。すなわち。使用できるようにする必要があります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() {}
  }
}

これでprintステートメントで使用できますElements.Type1.Aが、パラメーターとしてStringを受け入れるメソッドがあります。

だからそれはそれを作ります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は// * [contains(@class、'text1')]ではなく"text1"を返します。

4

2 に答える 2

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 に答える
3

列挙型ではなく、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 に答える