我需要计算一个特定的对象,但我只知道在运行时哪个对象。 现在我有类似
的东西public class Details {
private String typeOfObjectRequired;
private int numberOfObjectRequired;
}
在另一堂课中我有
public class Container {
private List<Type1> type1List;
private List<Type2> type2List;
private Type3 type3Object;
public int countType1() {
return type1List.size();
}
public int countType2() {
return type2List.size();
}
public int countType3() {
return type3Object.getNumberOfSomething();
}
}
现在我这样做(在第三个类中同时包含Details和Container作为属性)
public boolean hasNumberOfObjectRequired() {
int count = 0;
String type = details.getTypeOfObjectRequired();
if(type.equals("type1")) count = container.countType1();
else if (type.equals("type2")) count = container.countType2();
else if (type.equals("type3")) count = container.countType3();
if (count > details.getNumberOfObJectRequired) return true;
return false;
}
有更好的方法吗?我不想拥有这么多,如果因为我有超过3种不同的类型。
编辑: 现在我有5种不同的类型,我总是只需要其中一种。 基本上我想基于String
调用不同的方法答案 0 :(得分:1)
Container
类可以包含Map
列出的列表:
class Container {
private Map<String, List<?>> lists = new HashMap<>();
private List<TypeOne> first = ...;
private List<TypeTwo> second = ...;
public Container() {
lists.put("type1", first);
lists.put("type2", second);
}
public int count(String type) {
return lists.get(type).size();
}
}
您可以致电count
:
public boolean hasNumberOfObjectRequired() {
String type = details.getTypeOfObjectRequired();
int requiredCount = details.getNumberOfObjectRequired();
return container.count(type) >= requiredCount;
}
答案 1 :(得分:0)
你可以使用反射......
public boolean hasNumberOfObjectRequired() {
int count = 0;
String type = details.getTypeOfObjectRequired();
Method m = Container.class.getMethod("countType"+type.charAt(4));
return m.invoke(container) > details.getNumberOfObJectRequired);
}
或者您可以使用开关
switch(type){
case "type1":
count = ...
break;
case "type2"
....
}
如果type是int而不是字符串
,那就更好了