首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java抽象静态解决方案

Java抽象静态解决方案
EN

Stack Overflow用户
提问于 2009-12-17 00:51:24
回答 15查看 22.4K关注 0票数 27

我知道,由于多义性问题,抽象类和接口都不能包含既是abstract and static的方法,但有解决方法吗?

我希望有一个抽象类或一个接口,要求在扩展/实现这个类/接口的所有类中包含一个静态方法。在Java中有没有办法做到这一点?如果不是,这可能是我对Java的最后一根稻草...

编辑1:这个问题的背景是我有一堆类,现在叫它们Stick,Ball和Toy,它们在数据库中有一堆条目。我想创建一个名为Fetchable的超类/接口,它需要在它下面的每个类中都有一个静态方法getFetchables()。Stick、Ball和Toy中的方法必须是静态的原因是因为它们将与数据库对话,以检索数据库中每个类的所有条目。

编辑2:对于那些说你不能用任何语言做到这一点的人来说,这不是真的。你当然可以在继承了类方法的Ruby中做到这一点。这不是有人没有得到面向对象的问题,而是Java语言中缺少功能的情况。您可以尝试争辩说,您永远不应该需要继承静态(类)方法,但这是完全错误的,我将忽略任何提出这一点的答案。

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2009-12-17 01:11:30

您有几个选项:

  1. 使用反射查看该方法是否存在,然后调用它。为静态方法创建一个注解,就像其他人所说的那样,尽量不要使用静态方法。
票数 8
EN

Stack Overflow用户

发布于 2009-12-17 01:07:53

有很多关于‘这没有意义...’的答案。但就在昨天,我确实遇到了类似的问题。

我想在我的单元测试中使用继承。我有一个API和几个它的实现。因此,我只需要为所有实现使用一组单元测试,但是使用不同的setUp方法,这些方法是静态的。

解决方法:所有测试都是抽象类,带有一些带有受保护访问修饰符的静态字段。在所有实现中,我都添加了设置这些静态字段的静态方法。它工作得相当好,而且我避免了复制和粘贴。

票数 7
EN

Stack Overflow用户

发布于 2012-02-02 05:39:52

我也在处理这个问题。对于那些坚持认为它“没有意义”的人,我想请你暂时跳出这个语义框。我正在使用的程序本质上是关于反射的。

正如你所知道的,反射可能比直接的二进制函数调用多花三个数量级。这是一个不可避免的问题,软件需要移植到尽可能多的机器上,其中一些机器将是32位的,并且比我的开发机器一开始就慢。因此,需要通过静态方法检查类对所请求操作的适用性,并且在模块引导期间一次性运行所有反射方法。

首先也是最重要的,一切正常。我已经造好了整个东西。唯一的问题是,模块可以在.class中编译,而无需在编译时检查标识静态函数是否存在,从而导致一个天生无用的类。如果没有标识符及其包含的信息,为了安全起见,模块将不会加载。

我清楚地理解“抽象”和“静态”的完整定义的问题,并且理解它们在一起是没有意义的。然而,在Java中缺乏编译器强制包含的类方法的能力,尽管我很喜欢这门语言,但我怀念它。因此,这是每个曾经在软件上工作的程序员的人为限制,我相信我们都会同意这是一种痛苦。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1916019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档