다음 시나리오가 있습니다. 인터페이스 A, 100 클래스 B0 ... B99, A0 및 B0, B2 ...를 확장하는 C0, C2 ... C98 클래스 만 구현하는 B99 B98.Java 상속 문제 : vtable을 넘어서
B 클래스는 MySQL 데이터베이스에서 작동하며 테이블에서 다양한 작업을 수행합니다. C 클래스는 B 클래스 (유효성 검사, 권한 등)에 추가 논리를 추가합니다. B 클래스는 도구에 의해 생성되는 반면 C 클래스는 코더에 의해 작성됩니다.
클라이언트 응용 프로그램은 B 클래스를 사용하며 C 클래스에 액세스 할 수 없습니다. 메서드가 B 개체에 대해 호출되면 클라이언트는 개체를 serialize하여 호출 할 메서드 이름과 함께 서버 응용 프로그램으로 보냅니다.
서버는 B 개체를 받고이를 A로 캐스팅합니다. 그러나 서버는 해당 클래스가 있으면 C 클래스에서 재정의 된 메서드를 실행하고 그렇지 않으면 B 메서드를 실행하려고합니다. 정상적인 동작은 B의 메서드 만 실행합니다.
받은 개체를 C로 캐스트하는 거대한 SWITCH 문을 사용하지 않으면 서버에서 어떻게 처리 할 수 있습니까?
편집 : 나는 자바를 처음 접했고 반사가 무엇을 할 수 있는지 알지 못했다. 구글 (this 및 this)에서 약간의 도움으로 내 문제를 해결했습니다. 내가 원하는 것을 위해 동적 캐스팅을 사용할 수 있습니다. 모두에게 감사드립니다.
는 건가요가 매핑을 발견하거나 호출하는 경우 같은 B 객체를 반환하는 공장에 전달 클라이언트 'B b = new B();'를 할 것이지만, 응용 프로그램이 어떻게해서'b'를'C'로 변환하기를 원합니까? –
실제로. 서버는 객체를 A obj = Receive()로 받고 메소드를 obj.someMethod()로 호출합니다. 서버가 호출 할 메소드를 결정하는 방법은 중요하지 않습니다 (모든 클래스에서 구현되는 메소드가 몇 개 있습니다). 나는 C가 사용 가능하다면 C의 someMethod()가 호출되기를 바란다. – Rimio