Java 抽象静态解决方法

2022-09-01 16:11:14

我知道抽象类和接口都不能包含由于歧义问题而既抽象又静态的方法,但是有解决方法吗?

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

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

编辑2:对于那些说你不能用任何语言做到这一点的人来说,这不是真的。你当然可以在 Ruby 中执行此操作,其中类方法是继承的。这不是某人没有得到OO的情况,这是Java语言中缺少功能的情况。你可以试着争辩说你永远不需要继承静态(类)方法,但这是完全错误的,我将忽略任何提出这些观点的答案。


答案 1

您有几种选择:

  1. 使用反射查看该方法是否存在,然后调用它。
  2. 为名为“@GetAllWidgetsMethod”之类的静态方法创建一个批注。

  3. 正如其他人所说,尽量不要使用静态方法。


答案 2

关于“这没有意义”有很多答案......但事实上,我昨天遇到了类似的问题。

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

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


推荐