所以我的教授给了我这样的UML。。有一天,我和一个朋友聊天,他说使用instanceOf是一种不好的做法。
在此示例中,如何避免使用它?
在修改方法中,我必须使用instanceOf来检查我是否拥有教授或学生的实例,然后进行切换以修改对象的每个属性。
他还告诉我,在班级部门中实现该接口是没有意义的。应该在Person类中实现该接口。
任何有关改进此练习的帮助或指导都将很棒!
public interface Iactions{
void add(Object o);
void delete(Object o);
void modify(Object o);
void show(Object o);
}
public class Department implement Iactions{
// Attributes
ArrayList<Person> myGroupPersons;
// Implementing the methods from interface Iactions
@Override
public void modify(Object o) {
if (o instanceof Professor) {
modifyProfessor((Professor) o);
} else if (o instanceof Student) {
modifyStudent((Student) o);
}
}
}
public class Person {
// code
}
public class Profesor extends Person{
// code
}
public class Student extends Person{
// code
}
很抱歉缺少信息: 添加和删除一个方法,该方法可以插入对象并从arrayList中删除对象。 为了显示,我认为这只是arrayList的打印。 修改后,我需要有一个菜单,可以在其中选择要修改的对象的属性。
这是我的猜测,因为他只给了我们UML(我没有写这个uml),而他没有说其他话。
答案 0 :(得分:0)
Instanceof的用法不错,但总体上说它的设计不好。
Person类可以是抽象的,并且可以修改方法。 在学生和教授中,您都有自己的方法实现。 这样,您无需使用
if (Object instanceof Student){
//code
}
但相反:
Object.modify();
关于界面部分,其工作方式相同。
public class Person implements Iactions {
public void modify(){
//code
}
}
//then call this
student.modify();
答案 1 :(得分:0)
我建议您可以在Java中使用泛型。像这样:
public class People {
String name;
public People() {
}
}
public interface IAction<T> {
void add(T o);
void delete(T o);
void modify(T o);
}
public class Departement implements IAction<People> {
@Override
public void add(People o) {
// TODO Auto-generated method stub
}
@Override
public void delete(People o) {
// TODO Auto-generated method stub
}
@Override
public void modify(People o) {
// TODO Auto-generated method stub
}
}