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

标签 java reflection proxy

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

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/

相关文章:

.net - 为什么要在商业应用中使用反射?

java - 如果代码将被混淆,我是否可以始终使用反射 API?

amazon-web-services - 让 AWS 在 80 端口上监听 Spring Boot 应用程序

java - Java JVM 的 HTTP 代理设置

node.js - 在 AWS S3 存储桶上托管 React 应用程序时,无法使用代理重定向到 Node 服务器

java - 在加密之前修改 CXF RequestSecurityToken 的 XML

java - Java中的对象数组的混洗: Why does this method work for int but not for my objects?

java - Junit 模拟私有(private)方法

java - 根据位数分割给出的时间

c# - 如何使用给定的 Type 对象调用泛型方法?