首页 > 解决方案 > 如何避免在这个作业中使用 instanceof?

问题描述

所以我的教授给了我一个这样的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
}

抱歉缺少信息:添加和删除,一种插入对象并从数组列表中删除对象的方法。对于 show ,我认为只是 arrayList 的打印。并且修改,我需要有一个菜单,我可以在其中选择我想要修改的对象的哪些属性。

这是我的猜测,因为他只给了我们 UML(我没有写这个 uml)而且他没有说其他任何话。

标签: javainterfaceinstanceof

解决方案


Instanceof 使用起来还不错,但通常强调糟糕的设计。

Person 类可以是抽象的并且有一个方法 modify。在学生和教授中,您有自己的方法实现。这样你就不需要使用

if (Object instanceof Student){
//code
}

但反而:

Object.modify();

关于接口部分,它的工作方式相同。

public class Person implements Iactions {

public void modify(){
//code
}
}

//then call this
student.modify();

推荐阅读