我需要创建构建成本高且需要访问其中的最终变量的匿名内部类型。问题是我需要创建其中的许多,唯一的区别是使用的最终变量不同(对象本身和类型)。
是否有可能以更可重用的方式做到这一点?
一个简单的例子:
final Object aNeededParameter = "test";
Object expensiveToBuild = new ExpensiveInnerType() {
public void doSomething() {
aNeededParameter.toString();
}
});
我需要同时为不同对象创建昂贵的构建实例,例如 1L、新日期()、“另一个类似的用例”
基本思想是在运行时为具体类的不同序列化实例创建代理,在第一次使用时反序列化这些对象。我做了一个工作示例(底部的链接),但代理创建非常昂贵。
有一个 ProxyFactory 需要一个 MethodHandler 来通过字节码增强创建一个 Proxy 对象。MethodHandler 定义了一个方法
invoke(Object self, Method realMethod, Method proxyMethod, Object[] args) throws Throwable
在我的情况下,此方法需要访问包含构建代理的序列化对象的 byte[]。所以我必须创建一个新的 MethodHandler 并为我想要代理的每个对象构建/编译一个新的代理对象。
调用方法在原始对象的每个方法调用之前自动调用,并简单地检查该对象是否已初始化,如果没有则反序列化它。之后,它调用原始对象上的被调用方法。
如果您想查看具体的用例,请看这里: