자바 베이스-new 다른 패키지에 있고 보호된 구성 방법만 있는 클래스 대상 (익명 내부 클래스 사용)
6719 단어 JavaSE
카탈로그
전언
어떻게 하면 서로 다른 가방에 있고 보호된 구조 방법만 있는 클래스의 대상을 new할 수 있습니까?어떻게 실현되는지 설명하기 전에 일의 연유를 말해 보시오.다음은 어떻게 실현하는지 설명할 것이다.후속으로 묘사한 내용에 문제가 있으면 많은 독자들이 인내심을 가지고 지적하여 독자에게 불편을 가져다 줄 수 있으니 양해해 주십시오.gson을 사용하여 json 문자열을 해석할 때 다음과 같은 코드를 사용합니다.
Gson gson = new Gson();
List orderDetailList = new ArrayList<>();
orderDetailList = gson.fromJson(orderForm.getItems(), new TypeToken<List>() {}.getType());
그 중에서 가장 눈길을 끄는 것은 바로 이 부분의 코드이다.
new TypeToken<List>() {}.getType()
여기에 익명 내부 클래스
TypeToken
를 사용했습니다. protected
클래스 원본을 보면 이 클래스에는 new
수식의 무참한 구조 방법만 존재합니다. 정상적인 상황에서 우리는 서로 다른 가방new
에서 이러한 대상을 나타냅니다. (물론 제가 가리키는 것은protected
사용 호출된 구조 방법은 com.wm103.test
수식입니다.그러면 익명 내부류를 사용하는 방법을 가르쳐 드리겠습니다.실현 과정
구현 프로세스를 보다 잘 설명하기 위해 먼저 다음과 같은 클래스, Supper Class를 만들었습니다.
package com.wm103.test;
public class SupperClass {
private String message;
protected SupperClass() {
System.out.println("supper class init.");
}
public void print() {
System.out.println("This is supper class.");
System.out.println("message: " + this.getMessage());
}
public String getMessage() {
return this.message;
}
public void setMessage(String message) {
this.message = message;
}
}
마스터 클래스, MainClass를 다시 만들고
com.wm103
패키지에서 다음을 수행합니다.package com.wm103;
import com.wm103.test.SupperClass;
public class MainClass {
public static void main(String[] args) {
new SupperClass();
}
}
직접
new SupperClass()
IDE에서 이와 같은 힌트를 보실 수 있을 것 같습니다.'SupperClass()' has protected access in 'com.wm103.test.SupperClass'
SupperClass()
구조 방법은 protected
접근 권한이고 MainClass
와SupperClass
는 같은 가방에 없기 때문에 직접적으로new SupperClass()
접근할 수 없다.그럼 우리 어떻게 해야 되지?익명 내부 클래스를 사용합니다.다음과 같습니다.new SupperClass() {}.print();
이러한 상황에서 우리는 익명 내부 클래스의 대상을 만들고
SupperClass
클래스의 print
방법을 호출할 수 있다.확장성
익명 내부 클래스에서는 구조 함수를 정의할 수 없습니다.우리는 일반적으로 구조기를 이용하여 어떤 실례의 초기화 작업을 완성하는데 익명 내부 클래스에서 우리는 어떻게 초기화 작업을 실현해야 합니까?구성 코드 블록 사용!구조 코드 블록을 이용하면 익명 내부 클래스에 구조기를 만드는 효과를 얻을 수 있습니다.또는 위의 예를 예로 들면 다음과 같습니다.
new SupperClass() {
{
setMessage("Hello Supper Class.");
innerPrint();
}
public void innerPrint() {
System.out.println("This is inner class.");
}
}.print();
상기 익명 내부에서 초기화 작업을 위한 구조 코드 블록을 정의했고 자신만의 방법을 정의했다.이러한 예를 실행하면 콘솔에서 다음과 같은 출력 결과를 볼 수 있습니다.
supper class init.
This is inner class.
This is supper class.
message: Hello Supper Class.
구체적인 절차는 다음과 같다. SupperClass의 구조 방법을 호출하여 초기화->익명 내부 클래스를 실행하는 구조 코드 블록->print 방법을 호출한다(방법은 구조 코드 블록에서 초기화된 메시지 값을 출력한다).익명 내부에서 SupperClass와 같은 이름의 메서드를 정의하면 다음과 같이 메서드 무시가 발생합니다.
new SupperClass() {
{
setMessage("Hello Supper Class.");
innerPrint();
}
public void innerPrint() {
System.out.println("This is inner class.");
}
public void print() {
System.out.println("inner class::print");
}
}.print();
실행 결과는 다음과 같습니다.
supper class init.
This is inner class.
inner class::print
지식 포인트 확장 또는 참조
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WeakHashMap,IdentityHashMap,EnumMap다른 맵 구현 클래스와 달리 WeakHashMap 클래스의 키 대상은 간접적으로 약한 인용의 지시 대상으로 저장되며, 키가 정상적으로 사용되지 않을 때 자동으로 항목을 제거합니다.더 정확히 말하면, 주어진 키에 대한...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.