【陷阱】封装带有变长泛型参数时的易犯错误
反省几乎都用‘E’来表示,写着写着就弄混淆了
如下:
class GenericArrayProblem { main(String[] args) {// Exception in thread “main” java.lang.ClassCastException: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> {@Overridevoid 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);}}
posted on
,网站空间,网站空间,服务器空间此刻睡觉的口水将变成明天流下的泪水。