Java泛型的泛型
发布时间:2020-12-14 05:12:55 所属栏目:Java 来源:网络整理
导读:我有一个通用类,代表一段文本.该文本片段可以具有多种不同模式(不同类型的突出显示)中的任何一种.这些模式由枚举代表.每个项目的枚举可能不同,但它必须实现一个接口,提供一种方法来组合其中的2个(可以突出显示和加粗).所以我有一个界面: public interface T
我有一个通用类,代表一段文本.该文本片段可以具有多种不同模式(不同类型的突出显示)中的任何一种.这些模式由枚举代表.每个项目的枚举可能不同,但它必须实现一个接口,提供一种方法来组合其中的2个(可以突出显示和加粗).所以我有一个界面:
public interface TextFragmentMode<E extends Enum<E>> { /** * Will combine the supplied mode with the current mode and return the * result. * * @param mode The mode to combine with. * @return The combined mode. */ public E combine( E mode ); } 然后我的TextFragment是一个文本字符串和一个模式的容器.但是当我尝试声明类时: public class TextFragment<E extends TextFragmentMode<E extends Enum<E>>> { StringBuilder text; E mode; ... 我收到以下错误:
其中,根据eclipse语法高亮,指的是 E extends Enum<E> 部分代码.有谁知道我做错了什么?我一定是错过关于泛型的东西… ———————编辑——————- 我终于花时间阅读Josh Bloch(第二版)的“有效Java”,而事实证明,他将这个用例作为第34项:使用接口模拟可扩展枚举.就像我想说的那样,伟大的思想一样想,这将是太有道理! 解决方法
TextFragment< E – 代替;需要说两件事关于E.
>“扩展”TextFragmentMode< E> ;. 由于Java继承的勇气,您需要以相反的方式写: public class TextFragment<E extends Enum<E> & TextFragmentMode<E>> { (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |