【发布时间】:2010-05-18 08:23:19
【问题描述】:
我正在编写(嗯,完成)Java 的“扩展”,这将有助于角色编程。
我使用 javacc 将我的代码翻译成 Java 代码。我的编译器向每个声明的类添加了一些代码。这是一个更清楚的例子:
MyClass extends String implements ObjectWithRoles { //implements... is added
/*Added by me */
public setRole(...){...}
public ...
/*Ends of stuff added*/
...//myClass stuff
}
它为你声明的每一个类添加了 Implements.. 和必要的方法。相当粗糙,不是吗?
如果我在一个类中编写我的方法并且所有类都扩展它会更好..但是..如果类已经扩展了另一个类(就像示例一样)?
我不想创建一种管理角色的包装器,因为我不希望程序员必须了解的不仅仅是 Java、一些新的保留字及其用法。
我的想法是扩展 java.lang.Object.. 但你不能。 (对吧?)
其他想法?
我是新来的,但我关注这个网站,所以感谢您的阅读和您提供的所有答案! (我为英语道歉,我是意大利人)
【问题讨论】:
-
您不能扩展
String。这是一个最终类,你不能继承它:java.sun.com/javase/6/docs/api/java/lang/String.html -
“我的想法是扩展 java.lang.Object.. 但你不能。(对吗?)”嗯,我会说任何没有扩展子类的类默认情况下是 Object .
-
@James P. 我认为 Fabio 的意思是用他自己的更新版本替换 Object。可以做到这一点,为您自己的应用程序创建一个通用基类并从那里扩展所有内容。但是您不想将自动扩展添加到所有内容:)
-
@extraneon:啊,我明白了。是的,不幸的是,一旦形成了类层次结构,您就不能“热交换”父类。一个解决方案是要么形成一个包装器(Fabio 似乎并不想要),另一个是使用组合。