java 元编程_您是否可以使用Groovy元编程来覆盖Java类上的私有方法

我正在尝试使用元编程覆盖Java类上的私有方法.代码看起来像这样:

// Java class

public class MyClass{

private ClassOfSomeSort property1;

private ClassOfSomeOtherSort property2;

public void init(){

property1 = new ClassOfSomeSort();

property2 = new ClassOfSomeOtherSort();

doSomethingCrazyExpensive();

}

private void doSomethingCrazyExpensive(){

System.out.println("I'm doing something crazy expensive");

}

}

// Groovy class

public class MyClassTest extends Specification{

def "MyClass instance gets initialised correctly"(){

given:

ExpandoMetaClass emc = new ExpandoMetaClass( MyClass, false )

emc.doSomethingCrazyExpensive = { println "Nothing to see here..." }

emc.initialize()

def proxy = new groovy.util.Proxy().wrap( new MyClass() )

proxy.setMetaClass( emc )

when:

proxy.init()

then:

proxy.property1 != null

proxy.property2 != null

}

}

问题是没有调用doSomethingCrazyExpensive的重写实现 – 我认为这是因为私有方法在内部由init()方法调用而不是通过metaClass调用.如果我直接调用myProxy.doSomethingCrazyExpensive(),则会调用重写的方法,因此元编程在某种程度上起作用.

有没有办法使用元编程来覆盖Java类(或实例)上的方法,以便在内部调用时调用重写的实现?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值