Java 运行 项目列表的切换案例方法
Java run switch case methods with List of items
我需要简化我的方法 我需要 运行 这个方法适用于所有工作日:
if (!getAbsenceSo().equals("-")) {
switch (getAbsenceSo()){
case "uabgelehnt": setAbsenceSo("-"); break;
case "urlaubbeantragt": setAbsenceSo("-"); break;
case "urlaubgenehmigt": setAbsenceSo("Urlaub"); setArbeitMinutenSo((int)(wochenarbeitstunden*60/5)); break;
case "sonderurlaub": setAbsenceSo("Sonderurlaub"); setArbeitMinutenSo((int)(wochenarbeitstunden*60/5)); break;
case "ueabsetzer": setAbsenceSo("Ü-Absetzer"); break;
case "krank": setAbsenceSo("Krank"); setArbeitMinutenSo((int)(wochenarbeitstunden*60/5)); break;
case "kindkrank": setAbsenceSo("Kindkrank"); setArbeitMinutenSo((int)(wochenarbeitstunden*60/5)); break;
case "fbschule": setAbsenceSo("FB/Schule"); setArbeitMinutenSo((int)(wochenarbeitstunden*60/5)); break;
case "kurzarbeit": setAbsenceSo("Kurzarbeit"); setArbeitMinutenSo((int)(wochenarbeitstunden*60/5)); break;
case "unentschuldigt": setAbsenceSo("Unentschuldigt"); break;
}
}
因此下一个代码片段将如下所示:
if (!getAbsenceMo().equals("-")) {
switch (getAbsenceMo()){
case "uabgelehnt": setAbsenceMo("-"); break; and so on...
有什么方法可以防止重复代码吗?
我对 Java 了解不多 - 你能给我提示吗?
我可以在从字符串组合在一起的对象中调用方法。
例如我如何调用“setAbsense”+item(“-”); ???或者更好的应该怎么做???非常感谢!!!
不要尝试动态构造方法调用。相反,重新考虑您的设计。您有需要为同一类型的多个实例(相同数据、相同方法)执行的代码。这已经表明:使用 class。每个实例(Mo、Tu、...)都将具有相同的信息,但您可以在该实例本身上对其进行操作。
让您开始的快速示例:
public class App {
static class Absence {
private DayOfWeek dayOfWeek;
private String reason;
private int arbeitMinuten;
public Absence(DayOfWeek dayOfWeek, String reason) {
this.dayOfWeek = dayOfWeek;
this.reason = reason;
}
public DayOfWeek getDayOfWeek() {
return dayOfWeek;
}
public void setDayOfWeek(DayOfWeek dayOfWeek) {
this.dayOfWeek = dayOfWeek;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public int getArbeitMinuten() {
return arbeitMinuten;
}
public void setArbeitMinuten(int arbeitMinuten) {
this.arbeitMinuten = arbeitMinuten;
}
}
public static void main(String[] args) throws IOException {
int wochenarbeitstunden = 40;
List<Absence> absenceList;
// Build from your Datasource
absenceList = List.of(new Absence(DayOfWeek.MONDAY, "uabgelehnt"), new Absence(DayOfWeek.TUESDAY, "Krank"), new Absence(DayOfWeek.WEDNESDAY, "Kurzarbeit"));
for (Absence absence : absenceList) {
switch (absence.getReason()) {
case "uabgelehnt" -> absence.setReason("-");
case "urlaubbeantragt" -> absence.setReason("-");
case "urlaubgenehmigt" -> {
absence.setReason("Urlaub");
absence.setArbeitMinuten(wochenarbeitstunden * 60 / 5);
}
case "sonderurlaub" -> {
absence.setReason("Sonderurlaub");
absence.setArbeitMinuten(wochenarbeitstunden * 60 / 5);
}
case "ueabsetzer" -> absence.setReason("Ü-Absetzer");
case "krank" -> {
absence.setReason("Krank");
absence.setArbeitMinuten(wochenarbeitstunden * 60 / 5);
}
case "kindkrank" -> {
absence.setReason("Kindkrank");
absence.setArbeitMinuten(wochenarbeitstunden * 60 / 5);
}
case "fbschule" -> {
absence.setReason("FB/Schule");
absence.setArbeitMinuten(wochenarbeitstunden * 60 / 5);
}
case "kurzarbeit" -> {
absence.setReason("Kurzarbeit");
absence.setArbeitMinuten(wochenarbeitstunden * 60 / 5);
}
case "unentschuldigt" -> absence.setReason("Unentschuldigt");
default -> {}
}
}
}
}
我需要简化我的方法 我需要 运行 这个方法适用于所有工作日:
if (!getAbsenceSo().equals("-")) {
switch (getAbsenceSo()){
case "uabgelehnt": setAbsenceSo("-"); break;
case "urlaubbeantragt": setAbsenceSo("-"); break;
case "urlaubgenehmigt": setAbsenceSo("Urlaub"); setArbeitMinutenSo((int)(wochenarbeitstunden*60/5)); break;
case "sonderurlaub": setAbsenceSo("Sonderurlaub"); setArbeitMinutenSo((int)(wochenarbeitstunden*60/5)); break;
case "ueabsetzer": setAbsenceSo("Ü-Absetzer"); break;
case "krank": setAbsenceSo("Krank"); setArbeitMinutenSo((int)(wochenarbeitstunden*60/5)); break;
case "kindkrank": setAbsenceSo("Kindkrank"); setArbeitMinutenSo((int)(wochenarbeitstunden*60/5)); break;
case "fbschule": setAbsenceSo("FB/Schule"); setArbeitMinutenSo((int)(wochenarbeitstunden*60/5)); break;
case "kurzarbeit": setAbsenceSo("Kurzarbeit"); setArbeitMinutenSo((int)(wochenarbeitstunden*60/5)); break;
case "unentschuldigt": setAbsenceSo("Unentschuldigt"); break;
}
}
因此下一个代码片段将如下所示:
if (!getAbsenceMo().equals("-")) {
switch (getAbsenceMo()){
case "uabgelehnt": setAbsenceMo("-"); break; and so on...
有什么方法可以防止重复代码吗?
我对 Java 了解不多 - 你能给我提示吗? 我可以在从字符串组合在一起的对象中调用方法。 例如我如何调用“setAbsense”+item(“-”); ???或者更好的应该怎么做???非常感谢!!!
不要尝试动态构造方法调用。相反,重新考虑您的设计。您有需要为同一类型的多个实例(相同数据、相同方法)执行的代码。这已经表明:使用 class。每个实例(Mo、Tu、...)都将具有相同的信息,但您可以在该实例本身上对其进行操作。
让您开始的快速示例:
public class App {
static class Absence {
private DayOfWeek dayOfWeek;
private String reason;
private int arbeitMinuten;
public Absence(DayOfWeek dayOfWeek, String reason) {
this.dayOfWeek = dayOfWeek;
this.reason = reason;
}
public DayOfWeek getDayOfWeek() {
return dayOfWeek;
}
public void setDayOfWeek(DayOfWeek dayOfWeek) {
this.dayOfWeek = dayOfWeek;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public int getArbeitMinuten() {
return arbeitMinuten;
}
public void setArbeitMinuten(int arbeitMinuten) {
this.arbeitMinuten = arbeitMinuten;
}
}
public static void main(String[] args) throws IOException {
int wochenarbeitstunden = 40;
List<Absence> absenceList;
// Build from your Datasource
absenceList = List.of(new Absence(DayOfWeek.MONDAY, "uabgelehnt"), new Absence(DayOfWeek.TUESDAY, "Krank"), new Absence(DayOfWeek.WEDNESDAY, "Kurzarbeit"));
for (Absence absence : absenceList) {
switch (absence.getReason()) {
case "uabgelehnt" -> absence.setReason("-");
case "urlaubbeantragt" -> absence.setReason("-");
case "urlaubgenehmigt" -> {
absence.setReason("Urlaub");
absence.setArbeitMinuten(wochenarbeitstunden * 60 / 5);
}
case "sonderurlaub" -> {
absence.setReason("Sonderurlaub");
absence.setArbeitMinuten(wochenarbeitstunden * 60 / 5);
}
case "ueabsetzer" -> absence.setReason("Ü-Absetzer");
case "krank" -> {
absence.setReason("Krank");
absence.setArbeitMinuten(wochenarbeitstunden * 60 / 5);
}
case "kindkrank" -> {
absence.setReason("Kindkrank");
absence.setArbeitMinuten(wochenarbeitstunden * 60 / 5);
}
case "fbschule" -> {
absence.setReason("FB/Schule");
absence.setArbeitMinuten(wochenarbeitstunden * 60 / 5);
}
case "kurzarbeit" -> {
absence.setReason("Kurzarbeit");
absence.setArbeitMinuten(wochenarbeitstunden * 60 / 5);
}
case "unentschuldigt" -> absence.setReason("Unentschuldigt");
default -> {}
}
}
}
}