Java에서는 현재 타입을 타입으로 직접 참조하는 것이 불가능합니다. 변하기 쉬운. 문제는 현재 유형의 인스턴스를 반환할 수 있는 메서드를 작성하려고 할 때 발생하며, 이는 하위 유형 지정을 처리할 때 문제가 됩니다. 예를 들어, 기본 클래스에서 반환 유형 T를 사용하여 일반 메서드를 선언하면 실제 하위 클래스 유형이 아닌 하위 클래스의 기본 클래스 유형을 참조하게 됩니다.
이 문제를 해결하기 위해 다음과 같이 재귀 경계와 추상 클래스 계층 구조를 사용할 수 있습니다.
abstract class SelfTyped<SELF extends SelfTyped<SELF>> { abstract SELF self(); } class MyBaseClass<SELF extends MyBaseClass<SELF>> extends SelfTyped<SELF> { MyBaseClass() { } public SELF baseMethod() { return self(); } } final class MyLeafClass extends MyBaseClass<MyLeafClass> { @Override MyLeafClass self() { return this; } public MyLeafClass leafMethod() { return self(); } }
여기서 접근 방식에서 리프 클래스는 재귀 유형 매개변수 SELF를 자체 유형으로 확인하고 self()를 구현합니다. 리프 클래스를 직접 사용할 수 있으므로 올바른 반환 유형을 유지하면서 메소드 체이닝이 가능합니다.
MyLeafClass mlc = new MyLeafClass().baseMethod().leafMethod(); AnotherLeafClass alc = new AnotherLeafClass().baseMethod().anotherLeafMethod();
주의: 이 기술은 CRT(Curely Recurring Template Pattern)에 의존하며 특정 위험을 초래합니다. :
이러한 위험을 완화하려면 관련 클래스가 공개적으로 확장 가능하지 않은지 확인하고 SelfTyped 및 self().
이 해결 방법은 현재 유형을 참조하는 수단을 제공하지만 추가적인 복잡성과 제한 사항이 발생합니다. 이를 구현하기 전에 잠재적인 단점과 이점을 신중하게 비교하는 것이 좋습니다. 명시적인 유형 참조가 중요한 경우 이 솔루션이 유용할 수 있지만 지나치게 의존하거나 공개 API에 의존하지 마십시오.
위 내용은 Java에서 유형 변수를 사용하여 현재 유형을 어떻게 참조할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!