泛型几乎都用‘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); } }
本文探讨了Java泛型在实际应用中遇到的问题,特别是如何正确地使用泛型与数组结合的例子。通过具体的代码示例,展示了不同方式下泛型与数组相互作用的方式及其可能产生的错误。

被折叠的 条评论
为什么被折叠?



