ユーザーに応じて、進行状況の値とステップ番号が異なる共通のプロセスがあります。
これを解決するために、私はインターフェースを作りました:
public interface Progress {
int getTotalStepNumber();
int getIndex();
String getMessage();
@Override
String toString();
}
したがって、ステッププロセスの実装は次のようになります(文字通り、これはこのプロセスのステップの列挙です)。
public enum ProgressImplementationOfProcessOne implements Progress {
STEP_ONE(1, "Step one message."),
STEP_TWO(2, "Step two message.");
// ... etc. with more steps
/**
* Number of steps for this process.
*/
private static final int STEPS = 2;
private int index;
private String message;
ProgressImplementationOfProcessOne(int index, String message) {
this.index = index;
this.message = message;
}
@Override
public int getTotalStepNumber() { return STEPS; }
@Override
public int getIndex() { return this.index; }
@Override
public String getMessage() { return this.message; }
@Override
public String toString() { return this.message; }
}
しかしvalueOf()
、列挙の方法を使用して、実装から対応するステップを見つけるのもよいと思いました。だから私は私のインターフェイスに次の行を追加しました:
default Progress valueOf(String s) {
for (Progress progress : this.getValues()) {
if (progress.getMessage().equals(s)) {
return progress
}
}
return null;
}
default Progress valueOf(int i) {
for (Progress progress : this.getValues()) {
if (progress.getIndex() == this.getIndex()) {
return progress;
}
}
return null;
}
getValues()
インターフェースProgress
にはメソッドがないため、次のメソッドを追加しました(「enum実装はそれをネイティブに処理する」と考えています)。
default List<Progress> getValues() { return null; }
しかし、私はそれぞれについてこのエラーが発生する理由がわかりませんProgressImplementation
:This static method cannot hide the instance method from Progress.
。
class ProgressStep
enum値を置き換え、クラスによってenumを属性などに置き換える追加を作成することでそれを行うことができることはわかっていますが、enumは複数の値を処理できるので、もっと簡単にできると思いました。
ですでに指定されvalueOf
ているようにvalueOfEnum
、単にのような名前に変更するだけです。valueOf
java.lang.Enum
public static <T extends Enum<T>> T valueOf(Class<T> enumType,
String name) {
T result = enumType.enumConstantDirectory().get(name);
if (result != null)
return result;
if (name == null)
throw new NullPointerException("Name is null");
throw new IllegalArgumentException(
"No enum constant " + enumType.getCanonicalName() + "." + name);
}
このメソッドのコメントには、次のセクションが含まれています。
特定の列挙型Tの場合、名前から対応する列挙定数にマップするために、このメソッドの代わりに、その列挙で暗黙的に宣言されたpublic static T valueOf(String)メソッドを使用できます。列挙型のすべての定数は、その型の暗黙のpublic static T [] values()メソッドを呼び出すことで取得できます
強調鉱山
ご覧のとおり、valueOf(String s)
はすべての列挙型クラスですでに宣言されていますが、これが理由であり、列挙型のインターフェイスでは使用できません
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加