【发布时间】:2010-11-22 17:23:42
【问题描述】:
我有一个代表文本片段的通用类。该文本片段可能具有多种不同模式(不同类型的突出显示)中的任何一种。这些模式由枚举表示。每个项目的枚举可能不同,但它必须实现一个接口,该接口提供一种方法来组合其中的两个(可以突出显示并加粗)。所以我有一个界面:
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 的 Effective Java(第二版),结果发现他将这个用例作为 第 34 条:使用接口模拟可扩展枚举。就像我想说的一样伟大的思想……那太冒昧了!
【问题讨论】:
-
谢谢我在 P
上苦苦挣扎 :)