two*_*e18 24 java inheritance interface
我知道,由于模糊性问题,抽象类和接口都不能包含抽象和静态的方法,但有没有解决方法?
我希望有一个抽象类或一个接口,它要求在所有扩展/实现此类/接口的类中包含静态方法.有没有办法在Java中这样做?如果没有,这可能是我与Java的最后一根稻草......
编辑1:这个问题的背景是我有一堆类,现在称它们为Stick,Ball和Toy,它们在数据库中有一堆条目.我想创建一个名为Fetchable的超类/接口,它需要getFetchables()在它下面的每个类中使用静态方法.Stick,Ball和Toy中的方法必须是静态的原因是因为它们将与数据库通信以检索数据库中每个类的所有条目.
编辑2:对于那些说你不能用任何语言做到这一点的人,那是不正确的.你当然可以在Ruby中继承类方法.这不是某人没有获得OO的情况,这是Java语言中缺少功能的情况.您可以尝试争辩说您永远不需要继承静态(类)方法,但这是完全错误的,我将忽略任何提出这些要点的答案.
你有几个选择:
为名为@GetAllWidgetsMethod的静态方法创建注释.
正如其他人所说,尽量不要使用静态方法.
关于"这没有意义......"有很多答案,但事实上我昨天遇到了类似的问题.
我想在单元测试中使用继承.我有一个API和几个实现.因此,对于所有实现,我只需要一组单元测试,但使用不同的setUp方法是静态的.
解决方法:所有测试都是抽象类,其中一些静态字段具有受保护的访问修饰符.在所有实现中,我添加了静态方法来设置这些静态字段.它工作得相当不错,我避免了复制和粘贴.
小智 5
我也在处理这个问题。对于那些坚持认为它“没有意义”的人,我会邀请您在语义框之外思考片刻。我正在使用的程序本质上是关于反射的。
如您所知,反射的时间比直接的二元函数调用要长三个数量级。这是一个不可避免的问题,软件需要移植到尽可能多的机器上,其中一些机器是 32 位的,并且比我的开发机器开始时慢。因此,需要通过静态方法检查类对请求操作的适用性,并且所有反射方法在模块启动期间立即运行。
一切正常,首先。我已经建立了整个事情。唯一的问题是模块可以在 .class 中编译,而无需编译时检查以查看识别静态函数是否存在,从而导致天生无用的类。如果没有标识符及其包含的信息,为了安全起见,不会加载模块。
我清楚地理解“抽象”和“静态”的完整定义的问题,并且理解它们在一起没有意义。然而,Java 缺乏编译器强制包含的类方法的能力,尽管我喜欢这种语言,但我很想念它。因此,这是对在软件上工作的每个程序员的人为约束,我相信我们都同意这是一种痛苦。
| 归档时间: |
|
| 查看次数: |
21505 次 |
| 最近记录: |