java - 如何避免在这个作业中使用 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)而且他没有说其他任何话。
解决方案
Instanceof 使用起来还不错,但通常强调糟糕的设计。
Person 类可以是抽象的并且有一个方法 modify。在学生和教授中,您有自己的方法实现。这样你就不需要使用
if (Object instanceof Student){
//code
}
但反而:
Object.modify();
关于接口部分,它的工作方式相同。
public class Person implements Iactions {
public void modify(){
//code
}
}
//then call this
student.modify();
推荐阅读
- css - 即使页面被禁用,角度启用工具提示
- html - 拒绝连接到 x,因为它违反了以下内容安全策略指令 (connect-src)
- spring-boot - 使用 Spring Data MongoDB 进行 MongoDB 项目和组操作
- reactjs - 在 React onclick 中添加列和行
- python - __add__ 运算符重载无法按预期工作
- java - 使用tomcat启动spring boot应用程序时出现java.lang.VerifyError
- c# - 如何在c#窗口窗体的面板上存储然后显示以前绘制的形状
- reactjs - 将 ReactJs 和 VueJS 项目发布到 Ubuntu 服务器
- android - 如何在 AlertDialog 中使用 PDFView 打开 PDF 文档?
- r - osmar (R) 中的 get_osm 函数给出 SSL 错误