のJavaの列挙型の内側に定義された値に切り替えてください。しかし、私が望むのは、switch-caseでは、enum Value
で定義されている文字列を使用するということです。 にs1
を使用すると、エラーが発生します。退出は何ですか?は、どのように私は、次のコードを持つ文字列
答えて
列挙型には、列挙型をStringとして返すメソッド.name()
があります。すべての "値"はこれに相当します。
フィールド、コンストラクタ、およびゲッターを削除し、現在getValue()
を呼び出しているname()
を呼び出すことができます。
さらに、toString()
のデフォルトの実装ではname()
が返されるため、toString()
メソッドを削除しても効果はありません。
最後に、列挙型自体をオンにすることができます。
列挙型で、あなたの文字列が...実際にenumertor定数と同じであるので、それは少し冗長で完全にunnescessaryです...
これを試してみてください。
enum Value {
INSERT_ONLY, UPDATE_ONLY, UPSERT;
}
public static void main(String[] args) {
Week obj = new Week() ;
Value s = obj.getValue() ;
switch(s) {
case INSERT_ONLY : System.out.println("INSERT_ONLY") ;
break ;
case UPDATE_ONLY : System.out.println("UPDATE_ONLY") ;
break ;
}
}
}
最終的に' MyClass'のオブジェクトをjsonオブジェクトに変換する必要があるので、これらの文字列が必要です。 – user3282758
Enum canメソッド名()を呼び出すと文字列として出力されます。 –
あなたはそれを試みることができます次のようになります。
基本的に、switch-statementはenum-namesを使用します。したがっての方法をValue
のobj.getValue()
で返す必要はありません。
スイッチが文字列と組み合わせて動作しない理由を知りたい場合は、hereをご覧ください。 もう1つの提案:switch-statementにdefault-branchも追加してください。
私が正しく理解していれば、不明な文字列s
で列挙定数を検索しようとしています。 case
の式をs1
にすることができない理由は、compile-time constantである必要があります。これはs1
ではありません。あなたの例では、主に理論的であると思われるので、私はいくつかのオプションを提案します、あなたはあなたの実際のケースに最も適したを選択することができます:列挙型の名前を想定し
はその
value
秒(場合と同じですただこれを行う、あなたは完全にフィールドをスクラップすることができます)、あなたはちょうどその名前で列挙型を検索しようとしている:MyClass.Value v = MyClass.Value.valueOf(s);
マッピングが
s1
見つかりされていない場合、これはIllegalArgumentException
がスローされます。まだ名前を想定しは同じですが、あなたはいくつかの追加の例およびカスタム・ロジックと実際の
switch
が必要なのか:try { MyClass.Value v = MyClass.Value.valueOf(s); switch (v) { case INSERT_ONLY : System.out.println("INSERT_ONLY") ; break ; } } catch (IllegalArgumentException e) { switch (s) case "s2" : System.out.println("s2") ; break ; } }
名が実際には同じでない場合は、静的を追加することができます
valueOf()
をシミュレートする列挙クラス内の定数のマップ、:public enum Value { ONLY_INSERT("ONLY_INSE"), ONLY_UPDATE("UPDATE_ONLY"), UPSERT("UPSERT") ; private static final Map<String, Value> byName = new HashMap<>(); static { for (Value v : values()) { byName.put(v.getVal(), v); } } public static Value byName(String name) { Value result = byName.get(name); if (result == null) { throw new IllegalArgumentException("Invalid name" + name); } return result; } private final String val ; private Value(final String v) {val = v ;} public String toString() {return val ;} public String getVal() { return val; } } ;
今、あなたは
MyClass.Value.byName()
を使用して、従来のソリューションと同じ操作を行うことができます。
- 1. どのように私は次の文字列持つタブ
- 2. 私は次のような3つの文字列持つMATLAB
- 3. は、私は、次の2つの文字列持つ文字列
- 4. は、私は次の文字列持つ
- 5. は、私は、次のRコードを持つ文字列
- 6. 私はRubyで、次のコードを持つ文字列
- 7. のPostgreSQL:私は次の文字列持つ文字列
- 8. どのように私は、次のHTMLコードを持つHTML
- 9. 私は、Javaを使用して、私は次の文字列持つ文字列
- 10. は、どのように私はこのような文字列持つ
- 11. 文字列は、私は、次のコードを持ってjQueryの
- 12. は、私は次の文字列の行列を持つベクトルMATLAB
- 13. は、どのように私は、文字列は、私はこのような文字列を持っている
- 14. は、私は、次のコードを持っている文字列
- 15. は、私はこのようになります文字列持つ文字列
- 16. 私は次のように生成されたJSON文字列持つC#の
- 17. は、私はこのようなJSON文字列を持つJSON文字列
- 18. 私は次のような文字列を持つSQL Serverの中で
- 19. 私は次のコードを持っている文字列
- 20. 私は次のコードを持っている文字列
- 21. は、どのように私は次のように、文字列のリストのRDDを持っているのScala
- 22. 私は、文字列持つ文字列
- 23. Railsの - 私はこのような配列持つ文字列
- 24. 私は次の文字列を持っている文字列
- 25. 私はこのようなSVG-コードの文字列持つ最初の5
- 26. どのように私は、文字列
- 27. 私はこのような文字列を持つ文字列チタン
- 28. 私はこのようになります文字列持つ
- 29. 私はこのような文字列を持つアレイのJavascript
- 30. は、次のように私は、文字列のリストを持っている文字列
使用しているJavaのバージョンは?エラーは何ですか? – shmosel
私は 'case'に' s1'を使い、 'switch'には入れません – user3282758