【SalesForce, Apex】Switchで定数を使いたいがどうやらできない為、Enumを使用する
Switchのステートメントの式に定数を使用できなかった。
API Version 49.0です。
リファレンスを参照すると式に使用することができる型はこちらとなっている。
Apex switch ステートメントの式では、次のいずれかの型になります。
Integer
Long
sObject
String
Enum
リテラルを使用したSwitch ※デプロイOK
Integer triggerStatus = 1; // 便宜上ここで代入
switch on triggerStatus {
when 1 {
// do stuff
}
when 2 {
// do stuff
}
when 3 {
// do stuff
}
when else {
// do stuff
}
}
Integer triggerStatus = 1; // 便宜上ここで代入
switch on triggerStatus {
when 1 {
// do stuff
}
when 2 {
// do stuff
}
when 3 {
// do stuff
}
when else {
// do stuff
}
}
こちらはデプロイできる。
ただ、マジックナンバーとなり、可読性がよろしくない。
String triggerPage = 'input'; // 便宜上ここで代入
switch on triggerPage {
when 'input' {
// do stuff
}
when 'list' {
// do stuff
}
when 'detail' {
// do stuff
}
when else {
// do stuff
}
}
こちらもデプロイできる。
ただ、ハードコーディングになり、保守性がよろしくない。
定数を使用したSwitch ※デプロイNG
// 定数定義
public final String INPUT_PAGE = 'input';
public final String LIST_PAGE = 'list';
public final String DETAIL_PAGE = 'detail';
// 定数定義
public final String INPUT_PAGE = 'input';
public final String LIST_PAGE = 'list';
public final String DETAIL_PAGE = 'detail';
switchの式を定数に変更
String triggerPage = 'input'; // 便宜上ここで代入
switch on triggerPage {
when INPUT_PAGE {
// do stuff
}
when LIST_PAGE {
// do stuff
}
when DETAIL_PAGE {
// do stuff
}
when else {
// do stuff
}
}
デプロイエラー
Variable does not exist: INPUT_PAGE (10:10)
Variable does not exist: LIST_PAGE (13:10)
null occurs as more than one when branch for this switch statement (9:1)
null occurs as more than one when branch for this switch statement (9:1)
Variable does not exist: DETAIL_PAGE (16:10)
定数の存在を知らないようだ。なぜ。
プロパティを使用したSwitch ※デプロイNG
定数はダメなのでプロパティに変更して使用してみる。
public String inputPage { get { return 'input'; }}
public String listPage { get { return 'list'; }}
public String detailPage { get { return 'detail'; }}
プロパティに変更
String triggerPage = 'input';
switch on triggerPage {
when inputPage {
// do stuff
}
when listPage {
// do stuff
}
when detailPage {
// do stuff
}
when else {
// do stuff
}
}
デプロイエラー
Variable does not exist: INPUT_PAGE (10:10)
Variable does not exist: LIST_PAGE (13:10)
null occurs as more than one when branch for this switch statement (9:1)
null occurs as more than one when branch for this switch statement (9:1)
Variable does not exist: DETAIL_PAGE (16:10)
同じエラー。なぜ。
Enumを使用したSwitch ※デプロイOK
Enum使用に変更。
// Enum定義
private enum TriggerPage { INPUT, LIST, DETAIL }
private TriggerPage triggerPage;
TriggerPage triggerPage = HogeClass.TriggerPage.INPUT; // 便宜上ここで代入
switch on triggerPage {
when INPUT {
// do stuff
}
when LIST {
// do stuff
}
when EDIT {
// do stuff
}
when else {
// do stuff
}
}
デプロイできた。
TriggerPage triggerPage = HogeClass.TriggerPage.INPUT;
Enumの値を格納するときは、クラス名から指定しないといけない。
when INPUT {
式ではTriggerPage.INPUTとしなくても switch on で渡す値の型を見ている為、Enumで指定した値のみで大丈夫みたい。
Javaでは?
Javaライクな言語なので、Javaではどうだろう?
じゃあstaticをつけてみる
じゃやApexの方でStaticをつけてみよう
private static final String INPUT_PAGE = 'input';
public void switchTest() {
switch on 'input' {
when INPUT_PAGE {
System.debug('aaaa');
}
}
}
デプロイエラー
Field must be an enum reference (20:18)
Enumを使用しろと。
なぜ定数弾かれるのだろうか。。。どなたか知ってる方コメントお待ちしてます。
Author And Source
この問題について(【SalesForce, Apex】Switchで定数を使いたいがどうやらできない為、Enumを使用する), 我々は、より多くの情報をここで見つけました https://qiita.com/michida/items/9c415264088622617512著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .