【陷阱】封装带有变长泛型参数时的易犯错误

【陷阱】封装带有变长泛型参数时的易犯错误

反省几乎都用‘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

,网站空间,网站空间,服务器空间此刻睡觉的口水将变成明天流下的泪水。

【陷阱】封装带有变长泛型参数时的易犯错误

相关文章:

你感兴趣的文章:

标签云: