【함정】 길이가 길어지는 범용 파라미터를 봉인할 때 범하기 쉬운 오류
4307 단어 범용
다음과 같습니다.
class GenericArrayProblem {
public static void main(String[] args) {
// Exception in thread "main" java.lang.ClassCastException:
// [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
new PrinterWrapper<String>("abc", new StringPrinter()).print();
}
}
class PrinterWrapper<E> {
private E element;
private Printer<E> printer;
PrinterWrapper(E element, Printer<E> printer) {
this.element = element;
this.printer = printer;
}
void print() {
this.printer.print(element);
}
}
abstract class Printer<E> {
abstract void print(E... elements);
}
class StringPrinter extends Printer<String> {
@Override
void print(String... elements) {
for (String s : elements)
System.out.println(s);
}
}
다음과 같이 변경할 수 있습니다.
class PrinterWrapper<E> {
private E[] element;
private Printer<E> printer;
PrinterWrapper(E[] element, Printer<E> printer) {
this.element = element;
this.printer = printer;
}
void print() {
this.printer.print(element);
}
}
혹은
class PrinterWrapper<E> {
private E[] element;
private Printer<E> printer;
PrinterWrapper(Printer<E> printer,E...element) {
this.element = element;
this.printer = printer;
}
void print() {
this.printer.print(element);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 범용 요약(二): 범용과 수조수조는 원소의 실제 유형을 추적할 수 있으며, 이 유형은 수조가 생성될 때 만들어진 것이다.위에서 설명한 코드 한 줄: gia = (Generic<Integer>[])new Object[SIZE], 그룹을 만들 때 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.