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

时间:2016-10-02 16:05:04

标签: java methods reflection

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

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

    public void b(){
       //stuff
    }
 }

我有一个Foo的例子: Foo instanceOfFoo = new Foo();

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

2 个答案:

答案 0 :(得分:2)

你不能删除一个方法,不是不改变字节代码和破坏代码"合同",但是你可以扩展课程并让孩子上课'如果调用,则方法覆盖抛出Javassist。子类也应该弃用该方法,并在其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);
    }
}

答案 1 :(得分:1)

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

答案很长:如果您可以控制用于加载ClassLoader类的Foo,则可以拦截加载Foo类的请求并使用ASM或{{3}在加载之前修改类的字节码。