我想知道是否有任何方法可以实现以下目标。
反射有没有选择呢?
答案 0 :(得分:3)
不,这完全不可能,也没有任何意义。实例方法可以访问(并且通常使用)实例变量。应该怎么做一个典型的set或get方法已经“静态”可能吗?
答案 1 :(得分:1)
这没有任何意义。非静态方法是非静态的,原因在于它需要访问特定于类的特定实例的成员数据。你会如何将其转换为静态?
答案 2 :(得分:1)
即使你使用的工具可以让你改变一个类(比如BCEL),你仍然无法实现任何目标,因为(除了所有的小警告)你将方法从实例方法改为静态,所有代码调用它将抛出一个NoSuchMethodError
。原因是调用静态/实例方法使用两个不同的操作码。
答案 3 :(得分:0)
没有。你不能用反射改变一个类。你可以检查它。
答案 4 :(得分:0)
我认为这不可能。
如果你的方法使用'this'引用,那将是一个未定义的行为。
答案 5 :(得分:0)
正如所有人都说的那样糟糕,不应该这样做。
但是,如果你必须实现这个目标并且你已经给出了理由,那么我可能想尝试不同的东西来实现这一点。
我可能会创建一个单例类并提供一个静态方法(facade)来访问所需的API方法,并始终确保所有其他类使用此单例类方法来访问API方法。