我有两个对象,比如对象a和对象b。这两个对象都有一些属性,如名称,年龄等。我想写一个方法,我将一些字符串值作为参数传递给此方法,并为两个对象打印一些值。要打印的值由传递给方法的String决定。更清楚: -
Class A{
String name;
String age;
//getters and setters for name and age
}
Class B{
String salary;
String level;
//getters and setters for name and age
}
public String getValue(String attribute)
{
switch(attribute)
{
case "name":
System.out.println(a.getName());
System.out.println(b.getSalary());
break;
case "age":
System.out.println(a.getAge());
System.out.println(b.getLevel());
break;
}
}
现在使用switch语句完成这项工作。但我已经读过,切换语句对于OO设计来说不是一个好习惯。我能做到这一点的其他方法是什么?我已经阅读了有关使用枚举的内容,但我对此并不十分清楚。
答案 0 :(得分:5)
“正确”的答案可能是继承。我会在这里添加其他几个选项,只是为了完整性。
这可能是“正确”的答案。
<强>赞成强>
<强> CONS 强>
public interface X {
public Object getField1();
public Object getField2();
}
public class A implements X {
/* implementation... */
}
public class A implements X {
/* implementation... */
}
X x=create();
System.out.println(x.getField1());
System.out.println(x.getField2());
<强>赞成强>
setAccessible()
<强> CONS 强>
// Note that we're accessing fields directly. You should probably use accessor methods instead.
Object x=create();
for(String name : new String[]{"all", "your", "fields"}) {
Field field=x.getClass().getField(name);
Object value=field.get(x);
System.out.println(name+" = "+value);
}
<强>赞成强>
<强> CONS 强>
enum Value {
FIELD1 {
public Object get(A a) {
return a.field1;
}
public Object get(B b) {
return b.field1;
}
}, ...;
public abstract Object get(A a);
public abstract Object get(B b);
};
A a=create();
B b=create();
for(Value value : Value.values()) {
System.out.println(value.get(a));
System.out.println(value.get(b));
}