【罠】長くなる汎用パラメータを封入した場合のエラー
4308 ワード
汎用型はほとんどが「E」で表記されていて、書いているうちに紛らわしくなってしまいます
次のようになります.
次のように変更できます.
または
次のようになります.
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);
}
}