【发布时间】:2020-11-18 04:50:32
【问题描述】:
有一个更好的问题(链接如下)。我的问题鼓励了糟糕的编码做法,但没有概述这些做法的风险。
Can a Java class add a method to itself at runtime?
原来的问题如下:
有没有办法在运行时将方法添加到类定义中?
例如,假设我有以下界面
public interface Singleton<T> {
@StaticContract
T getInstanceStatic();
}
在运行时,我会扫描所有类以查找带有注释“StaticContract”的方法,并将已实现方法的静态版本添加到类定义中。但是,我不知道我将如何去做,或者这是否可能。
在我当前的实现中,如果运行时反射在初始化期间没有找到方法的静态方法,我会抛出 NoSuchMethodError。最大的问题是,如果开发人员不熟悉接口,他们可能不知道他们应该创建静态方法。非静态 getInstanceStatic() 对 Singletons 没有任何意义。它只是作为创建静态方法的提醒。
结合使用反射恢复已擦除类型的能力,这将允许我使用泛型远远超出预期。例如,您将不再需要定义和传递工厂对象。您可以在工厂生成的类中定义方法。
另外,如果在运行时没有办法做到这一点,有没有办法在编译时做到这一点?
【问题讨论】:
-
请不要破坏您的帖子。提交帖子后,您已将内容授权给整个 Stack Overflow 社区 (under the CC BY-SA license)。根据 SE 政策,任何破坏行为都将被撤销。
-
除上述内容外,您还收到了一份长而详细的答复,您已接受并称之为“一个漂亮的答复”。试图破坏或从根本上改变问题是对花时间帮助你的人的不尊重。
-
这不是这里的工作方式。请将原始问题作为路线图留给其他寻找类似问题的人。
-
版主 - 现在我对 stackoverflow 有了一些经验,我正在尝试删除我的帐户。我只是想在走之前把这个问题弄清楚。
-
您为什么要删除您的帐户?另外,你为什么要删除这个?答案显然对人们有帮助,那么为什么不把它留给其他人阅读呢?
标签: java