在 Java 中获取没有大 if else 条件的列表中的字段详细信息
Get field details inside list without large if else condition in Java
我有一个对象列表。名单很大。所有的值都是字符串。目前我正在为每个循环做 if 条件。但是可读性不会很好,会变得冗长。以下是代码片段:
List<Fields> fieldList = <(device,value),(quantity,value),(position,value),(note,value),(model,value),(lotNumber,value)...>;
for(Fields fl : fieldList)
{
if(fl.name.equals("device"))
doSomething1();
else if(fl.name.equals("quantity"))
doSomething2();
//This goes on
}
请提出更好的方法。
注意:时间不是一个因素。
从 java 7 开始,您还可以将 switch case
语句与 String
一起使用。
您还可以对不同的条件进行分组(如以下代码中的“device
”和“anotherDevice
”):
...
switch (f1.name) {
case "device":
case "anotherDevice":
doSomething1();
break;
case "quantity":
doSomething2();
break;
default:
doSomething3();
}
使用新的不同方法编辑:
如果您不限于 String 列表,则可以使用另一种方法。
定义接口 Worker
public interface Worker {
public void work();
}
定义实现 Worker
的 n classes
public class PrintWorker implements Worker {
public void work() {
System.out.println("Print something");
}
}
public class AnotherPrintWorker implements Worker {
public void work() {
System.out.println("A different action here");
}
}
使用 Worker
类型的对象创建列表
List<Worker> workers = new ArrayList<Worker>();
...
workers.add(new PrintWorker());
workers.add(new AnotherPrintWorker());
...
for (Worker worker : workers) {
worker.work();
}
正如您在本例中看到的,for 循环非常简单易读。 work()
方法的特定实现必须在实现 Worker
接口的每个 class 中阅读。
我有一个对象列表。名单很大。所有的值都是字符串。目前我正在为每个循环做 if 条件。但是可读性不会很好,会变得冗长。以下是代码片段:
List<Fields> fieldList = <(device,value),(quantity,value),(position,value),(note,value),(model,value),(lotNumber,value)...>;
for(Fields fl : fieldList)
{
if(fl.name.equals("device"))
doSomething1();
else if(fl.name.equals("quantity"))
doSomething2();
//This goes on
}
请提出更好的方法。 注意:时间不是一个因素。
从 java 7 开始,您还可以将 switch case
语句与 String
一起使用。
您还可以对不同的条件进行分组(如以下代码中的“device
”和“anotherDevice
”):
...
switch (f1.name) {
case "device":
case "anotherDevice":
doSomething1();
break;
case "quantity":
doSomething2();
break;
default:
doSomething3();
}
使用新的不同方法编辑:
如果您不限于 String 列表,则可以使用另一种方法。
定义接口 Worker
public interface Worker {
public void work();
}
定义实现 Worker
public class PrintWorker implements Worker {
public void work() {
System.out.println("Print something");
}
}
public class AnotherPrintWorker implements Worker {
public void work() {
System.out.println("A different action here");
}
}
使用 Worker
List<Worker> workers = new ArrayList<Worker>();
...
workers.add(new PrintWorker());
workers.add(new AnotherPrintWorker());
...
for (Worker worker : workers) {
worker.work();
}
正如您在本例中看到的,for 循环非常简单易读。 work()
方法的特定实现必须在实现 Worker
接口的每个 class 中阅读。