1

我想在锡兰/为锡兰编写一个 RMI 库(因为到目前为止我还没有找到)。

我需要的第一件事是代理。在Java中,我使用了类似的东西

Proxy.newProxyInstance(classLoader, interfaces, handler);  

1.锡兰有类似的东西吗?(还没有找到东西)


尝试自己编写类似的东西时,我遇到了这个使用字节码操作的 JVM 解决方案。漂亮,正是我想要的。

请注意,这甚至可以为一个类生成一个代理,而不仅仅是 Java 中的接口。在锡兰这应该是合法的,因为没有字段,我们可以用方法调用模拟整个类。

2.如果为类创建代理是不行的,请告诉我。另外,关于代理的锡兰直觉/未来是什么?应该有(没有)代理吗?


在代理的未来,我们有一个主要问题:

在锡兰我们有default关键字,没有它,方法就不能被提炼/覆盖。这也会产生final用于编译的 Java 输出类的方法。因此(甚至不是)字节码操作可以覆盖那些并将它们重定向到调用处理程序/拦截器。

3.我们如何处理这个问题?


我假设根本没有?我完全明白不允许优化方法和default/final关键字的想法,但这会阻碍类的 RMI/代理。

4.类的代理是个坏主意吗?


是的,我目前正在考虑和调查的问题还有很多:JS 实现、接口和默认方法等

这些点似乎是目前最相关的,所以让我们从这里开始。

4

2 回答 2

2

你可以尝试使用我写的这个模块:

https://github.com/gavinking/ceylon.proxy

或者,如果您只针对 JVM,则可以直接使用 Java Proxy

于 2017-07-29T21:13:45.810 回答
1

在进一步的研究中,我发现:

1.代理目前是 Ceylon 1.4 里程碑的一部分(关于代理的问题)。

3.为锡兰编译器启用EE模式,删除final关键字。

从这一点开始,我发现解决方案的工作方式与预期一致,并且与 Gavin 提供的解决方案完全相同。

于 2017-07-30T14:35:17.667 回答