현재 저는 3 개의 사용자 클래스가있는 프로젝트에서 작업 중이며, UserA, UserB, UserC는 추상 사용자 클래스를 상속받습니다.Java 다운 캐스트를 피하려면 어떻게해야합니까?
프로그램은 사용자가 로그인하고 로그 아웃해야한다는 시스템 소원을 에뮬레이트합니다.
해당 사용자의 인스턴스는 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의 인스턴스 인 경우)
왜 3 개의 별도 목록이 필요합니까? –
'User currentUser'를 가지고 있지만 나중에 메소드를 호출하기를 원하고 **이 'currentUser'가 어떤 사용자인지를 알기에 다소 모호한 것 같습니다. 'currentUser'는 어떻게 저장됩니까?그리고'clearUserAgenda' (또는 특정 유형의 사용자가'currentUser' 일 때만 ** ** 호출 될 수있는 다른 메소드)와 같은 메소드를 호출 할 책임이있는 ** 책임자는 누구입니까? 즉, 발신자 **는 현재 어떤 유형의 사용자가 로그인했는지를 어떻게 알 수 있습니까? – Marco13
그리고 모델을 작성하려는 유스 케이스는 무엇입니까? –