gpt4 book ai didi

java - 我可以让Java中的 `new X()`返回动态代理吗?

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:50 25 4
gpt4 key购买 nike

我知道我可以编写这样的动态代理:

public class DecoratedFile implements java.lang.reflect.InvocationHandler {

private Object delegate;

public static Object newInstance(Object delegate) {
return java.lang.reflect.Proxy.newProxyInstance(
obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(),
new DecoratedFile (delegate));
}

private DecoratedFile (Object delegate) {
this.obj = obj;
}

public Object invoke(Object proxy, Method m, Object[] args)
throws Throwable
{
... do something to `delegate`
}
}

...可以像这样实例化:

  File decorated = DecoratedFile.newInstance(new File("README.txt"));

有没有办法编写一个类,以便我可以使用“new”关键字实例化动态代理:

  File decorated = new DecoratedFile(new File("README.txt"));

例如,重构非动态实现而不影响其客户端。

如果答案是“不,你不能”——这背后有设计原则吗?

最佳答案

没有。

“其背后的设计原则”是 JLS 所说的。

你需要的是工厂模式,或者抽象工厂模式,无论它们之间有什么区别。我一直不明白为什么会有两个。

关于java - 我可以让Java中的 `new X()`返回动态代理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21994955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com