Java 범용 선언 방법을 하위 유형으로 되돌리는 방법
선언 방법은 하위 유형을 반환합니다.
Spring Security의 원본 코드에 Provider Manager Builder 인터페이스가 있습니다.
public interface ProviderManagerBuilder<B extends ProviderManagerBuilder<B>> extends SecurityBuilder<AuthenticationManager> {
B authenticationProvider(AuthenticationProvider authenticationProvider);
}
기존 AuthenticationManagerBuilder
public class AuthenticationManagerBuilder extends AbstractConfiguredSecurityBuilder<AuthenticationManager, AuthenticationManagerBuilder> implements ProviderManagerBuilder<AuthenticationManagerBuilder> {
//...
public AuthenticationManagerBuilder authenticationProvider(
AuthenticationProvider authenticationProvider) {
this.authenticationProviders.add(authenticationProvider);
return this;
}
//...
}
위쪽에 방해 항목이 많으니 우리가 간소화하자인터페이스 A는 다음과 같이 정의됩니다.
public interface A<T extends A<T>> {
T add();
}
설명: A 인터페이스는 하나의add 방법만 있고 일반 T를 되돌려줍니다.T의 성명은 약간의 용서가 있다.A 인터페이스 구현 클래스 B
public class B implements A<B> {
@Override
public B add() {
return null;
}
}
이 클래스 B에서add 방법은 형식 B를 되돌려줍니다.즉, 인터페이스 A에서 설명하는 방법은 하위 유형 B의 존재를 알지 못한다. 계승과 범형을 통해 반환값의 동적 어댑터 유형을 넣을 수 있다. 이 모든 것은 범용 반복 모드(Recurring Generic Pattern)
public interface A
public abstract class Enum<E extends Enum<E>>
implements Comparable<E>, Serializable {
//...
}
자바의 모든 매거 유형은 은밀한 계승자바입니다.lang. Enum, 현실적인 계승 성명 매거 유형, 심지어java를 통합하는 것을 허용하지 않습니다.lang. Enum도 컴파일러가 허용하지 않습니다.만약 매거류 StatusCode가 있다고 가정하면, 그 등가의 성명은 다음과 같다.
public class StatusCode extends Enum
이제 범용 제약을 검증해 보겠습니다.
1. Enum
2.
3.publicclass StatusCode extends Enum
왜 Enum의 성명이 이렇게 빙빙 돌았습니까?그냥 Enum 하면 안 돼요?
Enum
public int compareTo(E o) {}
범용 귀속 모델과 계승
범용 귀속 모드interface A
B implements A를 계승하고 실현하는 것을 고려하면 매개 변수 유형과 실체 유형은 일치합니다.이런 클래스 A의 방법 서명에 매개 변수 유형 T가 관련된 부분은 실현 클래스에서 실현 클래스 자체를 위해 유형 시스템을 더욱 엄격하게 한다.
위에서 설명한 Java범형이 성명 방법을 하위 유형으로 되돌리는 방법은 바로 편집자가 여러분에게 공유한 모든 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.