我目前正在做一个项目,我有 3 个用户类,假设 UserA、UserB、UserC,它们继承自抽象的 User 类。
该程序应该模拟系统要求用户登录和注销。
这些用户的实例存储在 3 个单独的列表中。
任何时候只有一个用户被“登录”,所以我有一个 User currentUser
变量。
当我想调用特定于 UserA、B 或 C 的方法时,我会进行强制转换。 如何在保持代码优雅的同时避免进行这种转换?
代码示例:
public abstract class User {
}
public class UserA extends User {
public void clearAgenda();
}
public class UserB extends User {
}
public class UserC extends User {
}
public class System {
private User loggedUser;
public void clearUserAgenda() {
((UserA) loggedUser).clearAgenda();
}
}
注意: 我事先知道如果正在使用一个操作,则当前用户支持该操作。 (例如:如果调用 System.clearUserAgenda() 则用户是 UserA 的实例)
最佳答案
如果要避免转换,必须在抽象类 User 中声明方法 clearAgenda()
。如果您不这样做,则只有 UserA 可以使用此方法,因此必须转换它。
关于java - 如何避免 Java 向下转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23816369/