서명은 다음과 같습니다이 POutput
를 확장 가능한 유형 OutputT
를 들어,이 방법은 (String, PTransform<? super PBegin, OutputT>)
에 적용되며 OutputT
를 반환한다는 것을 의미
public <OutputT extends POutput> OutputT apply(
String name, PTransform<? super PBegin, OutputT> root) {
...
}
.
TextIO.read()
는 PTransform<PBegin, PCollection<String>>
확장하는 TextIO.Read
반환 그것은 PTransform<? super PBegin, OutputT>
일치 :
이
- 유형
PBegin
이 하찮게 PBegin
- 유형
PCollection<String>
의 슈퍼입니다 그래서 POutput
확장의 .apply()
방법은 대체 OutputT = PCollection<String>
으로 적용 할 수 있습니다. OutputT
의 실제 값을 .apply()
의 서명으로 대체 한 후 반환 값은 PCollection<String>
입니다.
당신이 (POutput
로 대체되고 OutputT
)를 타입 삭제 동안 발생하는 말을하는지 - Pipeline.apply()
의 유형 소거 된 서명이 POutput apply(String, PTransform)
이다; 컴파일 된 바이트 코드의 서명은 Pipeline
입니다. 실제로 JVM이 실제로 실행될 때 관련된 것입니다. 그러나 형식 지우기는 이전에 형식 검사 후에 발생합니다. 그렇지 않으면 제네릭을 사용하는 거의 모든 Java 프로그램이 컴파일되지 않습니다.
이 정확히 Arrays.asList(1, 2, 3)
를 호출 할 때 발생하는 같은 일입니다 - 유형 - 삭제 서명이 List asList(Object[])
에도 불구하고 List<Integer>
보다는 List<Object>
또는 List
반환합니다.
유형 T는 컴파일 타임에 알려져 있습니다. –
내가 생각한 것과 모순 될 것입니다. 컴파일 타임에 T가 바운드 형식으로 바뀌 었습니다. 우리의 경우에 POutput – Andrei