Man*_*shi 0 java oop enums design-patterns switch-statement
我有两个对象说对象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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在使用switch语句完成工作.但我已经读过,切换语句对于OO设计来说不是一个好习惯.我能做到这一点的其他方法是什么?我已经阅读了有关使用枚举的内容,但我对此并不十分清楚.
"正确"的答案可能是继承.我会在这里提供其他几个选项,只是为了完整性.
这可能是"正确"的答案.
PROS
缺点
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());
Run Code Online (Sandbox Code Playgroud)
PROS
setAccessible()缺点
// 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);
}
Run Code Online (Sandbox Code Playgroud)
PROS
缺点
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));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |