2010-01-04 2 views
0

클래스를 인스턴스화하거나 선언 할 때 클래스의 부모를 지정할 수 있습니까?인스턴스화/선언시 클래스의 상위 유형을 지정 하시겠습니까?

MonitoredDevice<DeviceTypeToExtend> device = null; 

그리고 그 문에서의 MonitoredDevice 클래스는 형식 매개 변수의 DeviceTypeToExtend에서 확장하는 것입니다 예를 들어,이 비슷한 작업을 수행 할 수 있습니다. 이제 유형 매개 변수를 사용하여 수퍼 클래스에서 확장 할 수는 없지만 특정 부모로부터 "동적으로"확장한다는 목표를 달성하기 위해 유사한 것을 알 수 있습니다.

감사합니다,

스티브

답변

3

상속 대신 사용 구성, 과대 평가 (그것은 더 강력하고 유연) :

MonitoredDevice monitored = new MonitoredDevice(); 
monitor.setTargetDevice(new BaseDevice()); 

또는 장식 패턴 :

new MonitoredDeviceDecorator(new BaseDevice()); 
1

아니, 그럴 수 없어. 왜냐하면 MonitoredDevice 클래스는 자신의 형식 매개 변수에서 직접 확장해야하기 때문에 가능하지 않습니다. 열거 형과 마찬가지로 MonitoredDevice<T extends MonitoredDevice<T>>과 같은 값을 가질 수 있습니다. 그런 다음 수퍼 유형에 대한 원시 유형 정보가 계속 남아 있습니다.

+0

조슈아 블로크 (Joshua Bloch)는 여기에서 excerpted 된 Effective Java *와 같은 * 재귀 적 유형 범위에 대해 설명합니다. http://java.sun.com/docs/books/effective/generics.pdf – trashgod

0

많은 옵션이 있습니다. MonitoredDevice & DeviceTypeToExtend에 대한 인터페이스를 게시하면 달성하고자하는 바를보다 잘 파악할 수 있습니다.

mhaller의 의견이 맞습니다. 당신은 아마 상속으로 모든 것을하고 싶지 않을 것입니다.

한 가지 가능성 : 제네릭을 사용하십시오. 또한 구성을 사용할 수

public interface MonitoredDevice<E> { 

    E computeFoo(); 

    void doBar(); 

} 

(아마 간단한) 또는 다중 레벨 클래스 계층 구조 (권장하지 않음) : 귀하의 MonitoredDevice 인터페이스는 다음과 같이 보일 수 있습니다.

관련 문제