我有一个抽象类 A
我有大约 10 个类扩展 A
A 类有一个或两个静态方法,它们是静态的是有道理的,因为它们属于 10 个类,而不是它们的实例。例如,一种静态方法称为getAllFromX,它从X 中获取类的所有实例,不管它是什么,它可能是一个服务器,实际上它是,但没关系。因此,您会发现这些方法是静态的并且不绑定到实例是有道理的。
同时A类有一个非静态抽象方法,每个子类都覆盖这个方法(只返回一个字符串)。我不能让它成为静态的,因为静态方法不能被覆盖(...)。
总结一下:抽象类 A 有一个静态方法和一个抽象非静态方法,它被子类覆盖。我不能将第二种方法设为静态,因为它必须被覆盖。另一方面,我可以使第一个方法成为非静态的,但它会非常丑陋和糟糕的编程风格,所以我将保持这种方式。
捕获?类 A 中的静态方法必须获取非静态方法返回的值(对于继承静态方法的子类,当然)。
使用反射来完成这项工作是“最简单”的方法吗?我是说……真的吗?
例如,我得到了静态方法所在的类:
Class<?> cl=new Object(){}.getClass().getEnclosingClass(); (a hack I found here, thank god...)
然后我使用 getConstructor 来构造这个子类的对象。
然后我使用这个对象来调用非静态方法。
真的??难道不能更容易吗?我的意思是,如果我想在概念上正确地设计我的程序......
来自 C# 我不喜欢那样(以及类型擦除)。这很丑陋。可行但丑陋。和一个很大的绊脚石,至少对于初学者来说。编辑:再次阅读后,我会添加:/rant end。对不起,但我真的很在乎。