创建数组以将相同的参数传递给不同的 类
Create array to pass same arguments to different classes
根据 switch 语句的匹配,我的代码调用一个 class 或另一个。每个 class 都采用完全相同的参数组:
switch (propAlarma.asunto[iteracionAlarma]) {
case "Reinicio Mirth":
resultado = ReiniciosMirth.main(
prop,
propAlarma,
dt,
iteracionAlarma,
propAlarma.json[iteracionAlarma],
idNotify
);
break;
case "Alerta de actualizacion Mirth":
resultado = ActualizacionMensajeriaMirth.main(
prop,
propAlarma,
dt,
iteracionAlarma,
propAlarma.json[iteracionAlarma],
idNotify
);
break;
default:
System.out.println("No hay match en el switch");
}
这些是我传递的对象的 classes。例如:
public static String main(
Properties prop,
PropiedadesAlarma PropiedadesAlarma,
DateTime dt,
int iteracionAlarma,
JSONObject mailJson,
int idNotify
) {
我想对此进行优化,因为我计划向开关添加更多案例。我是 Java 的新人(我习惯在 Python 编程)。在 Python 我会做这样的事情:
arguments = [
prop,
propAlarma,
dt,
iteracionAlarma,
propAlarma.json[iteracionAlarma],
idNotify
]
if propAlarma.asunto[iteracionAlarma] == "Reinicio Mirth":
ReiniciosMirth.main(arguments)
if propAlarma.asunto[iteracionAlarma] == "Alerta de actualizacion Mirth":
ActualizacionMensajeriaMirth.main(arguments)
实现此目的的一种方法是为所有这些 classes 创建一个具有 main
方法的通用接口:
public interface OptionForTheSwitchStatement { // please give it a better name
String main(
Properties prop,
PropiedadesAlarma PropiedadesAlarma,
DateTime dt,
int iteracionAlarma,
JSONObject mailJson,
int idNotify
);
}
然后,让所有这些 classes 实现 OptionForTheSwitchStatement
:
public class ReiniciosMirth implement OptionForTheSwitchStatement {
public String main(
Properties prop,
PropiedadesAlarma PropiedadesAlarma,
DateTime dt,
int iteracionAlarma,
JSONObject mailJson,
int idNotify
) { ... }
}
请注意,如果您实施 OptionForTheSwitchStatement
,main
必须是非静态的。如果你不想改变它,那也没关系。见下文。
然后,在你的 switch 语句中,你可以这样做:
OptionForTheSwitchStatement option = switch (propAlarma.asunto[iteracionAlarma]) {
case "Reinicio Mirth" -> new ReiniciosMirth();
case "Alerta de actualizacion Mirth" -> new ActualizacionMensajeriaMirth();
default -> {
System.out.println("No hay match en el switch");
yield null;
}
};
您可以将此视为选择要调用哪个 class' main
方法的开关。
如果您不想将 main
方法更改为非静态方法,您可以使用方法引用代替:
OptionForTheSwitchStatement option = switch (propAlarma.asunto[iteracionAlarma]) {
case "Reinicio Mirth" -> ReiniciosMirth::main;
case "Alerta de actualizacion Mirth" -> ActualizacionMensajeriaMirth::main;
default -> {
System.out.println("No hay match en el switch");
yield null;
}
};
之后,使用参数调用options.main
:
if (options != null) {
options.main(
prop,
propAlarma,
dt,
iteracionAlarma,
propAlarma.json[iteracionAlarma],
idNotify
);
}
根据 switch 语句的匹配,我的代码调用一个 class 或另一个。每个 class 都采用完全相同的参数组:
switch (propAlarma.asunto[iteracionAlarma]) {
case "Reinicio Mirth":
resultado = ReiniciosMirth.main(
prop,
propAlarma,
dt,
iteracionAlarma,
propAlarma.json[iteracionAlarma],
idNotify
);
break;
case "Alerta de actualizacion Mirth":
resultado = ActualizacionMensajeriaMirth.main(
prop,
propAlarma,
dt,
iteracionAlarma,
propAlarma.json[iteracionAlarma],
idNotify
);
break;
default:
System.out.println("No hay match en el switch");
}
这些是我传递的对象的 classes。例如:
public static String main(
Properties prop,
PropiedadesAlarma PropiedadesAlarma,
DateTime dt,
int iteracionAlarma,
JSONObject mailJson,
int idNotify
) {
我想对此进行优化,因为我计划向开关添加更多案例。我是 Java 的新人(我习惯在 Python 编程)。在 Python 我会做这样的事情:
arguments = [
prop,
propAlarma,
dt,
iteracionAlarma,
propAlarma.json[iteracionAlarma],
idNotify
]
if propAlarma.asunto[iteracionAlarma] == "Reinicio Mirth":
ReiniciosMirth.main(arguments)
if propAlarma.asunto[iteracionAlarma] == "Alerta de actualizacion Mirth":
ActualizacionMensajeriaMirth.main(arguments)
实现此目的的一种方法是为所有这些 classes 创建一个具有 main
方法的通用接口:
public interface OptionForTheSwitchStatement { // please give it a better name
String main(
Properties prop,
PropiedadesAlarma PropiedadesAlarma,
DateTime dt,
int iteracionAlarma,
JSONObject mailJson,
int idNotify
);
}
然后,让所有这些 classes 实现 OptionForTheSwitchStatement
:
public class ReiniciosMirth implement OptionForTheSwitchStatement {
public String main(
Properties prop,
PropiedadesAlarma PropiedadesAlarma,
DateTime dt,
int iteracionAlarma,
JSONObject mailJson,
int idNotify
) { ... }
}
请注意,如果您实施 OptionForTheSwitchStatement
,main
必须是非静态的。如果你不想改变它,那也没关系。见下文。
然后,在你的 switch 语句中,你可以这样做:
OptionForTheSwitchStatement option = switch (propAlarma.asunto[iteracionAlarma]) {
case "Reinicio Mirth" -> new ReiniciosMirth();
case "Alerta de actualizacion Mirth" -> new ActualizacionMensajeriaMirth();
default -> {
System.out.println("No hay match en el switch");
yield null;
}
};
您可以将此视为选择要调用哪个 class' main
方法的开关。
如果您不想将 main
方法更改为非静态方法,您可以使用方法引用代替:
OptionForTheSwitchStatement option = switch (propAlarma.asunto[iteracionAlarma]) {
case "Reinicio Mirth" -> ReiniciosMirth::main;
case "Alerta de actualizacion Mirth" -> ActualizacionMensajeriaMirth::main;
default -> {
System.out.println("No hay match en el switch");
yield null;
}
};
之后,使用参数调用options.main
:
if (options != null) {
options.main(
prop,
propAlarma,
dt,
iteracionAlarma,
propAlarma.json[iteracionAlarma],
idNotify
);
}