我可以从java的类实例中删除一个方法吗?



假设我有一个名为'Foo'的类,它有一些方法:

 public class Foo{
    public void a(){
       //stuff
    }
    public void b(){
       //stuff
    }
 }

,我有一个实例Foo:Foo instanceOfFoo = new Foo();

我可以从'instanceOfFoo'中删除方法'a'吗?

你不能删除一个方法,除非改变字节码并破坏代码的"契约",但你可以扩展类,并让子类的方法重写在调用时抛出一个UnsupportedOperationException。此外,子类应该弃用该方法,并在其javadoc中解释其背后的基本原理,以及在其位置上使用什么。

这将改变类的契约,但以一种更负责任的方式,而不是说摆弄字节码。

例如:

public class Foo {
    public void a() {
        // stuff
    }
    public void b() {
        // stuff
    }
}

public class FooChild extends Foo {
    /**
     * @deprecated: This method should no longer be used and will throw an exception
     */
    @Override
    @Deprecated
    public void a() {
        String text = "The method a is no longer supported";
        throw new UnsupportedOperationException(text);
    }
}

简短的回答:不,不是真的。

长回答:如果你可以控制ClassLoader被用来加载Foo类,你可以拦截加载Foo类的请求,并在加载它之前使用ASM或Javassist修改类的字节码

相关内容

  • 没有找到相关文章

最新更新