2017-07-29 2 views
0

Je veux écrire une bibliothèque RMI dans/pour ceylon (puisque je n'en ai pas trouvé jusqu'ici).RMI/Proxy dans ceylon et relation avec des méthodes non-par défaut

La première chose dont j'ai besoin est un proxy. En java je quelque chose comme

Proxy.newProxyInstance(classLoader, interfaces, handler); 

1. Y at-il quelque chose d'équivalent à Ceylon? (N'ont pas trouvé quelque chose)


Toute tentative d'écrire quelque chose comme ça moi-même, je suis tombé sur cette solution for the jvm en utilisant la manipulation de code d'octets. Nifty et exactement ce que je veux. Notez que cela peut même produire un proxy pour une classe, pas seulement pour une interface comme dans Java. À Ceylan, cela devrait être légitime, car il n'y a pas de champs et nous pouvons simuler la classe entière avec des appels de méthode.

2. Si créer des proxies pour les classes est un non-dire juste me dire. En outre, quelle est l'intuition de Ceylan/futur sur les procurations? Doit-il y avoir (non) de procurations?


Dans un avenir avec proxies nous avons un problème majeur:

En Ceylon nous avons le mot-clé default, sans une méthode ne peut pas être raffiné/écrasé. Cela entraîne également des méthodes final pour les classes de sortie Java compilées. De ce fait (même pas), la manipulation du code d'octet peut écraser ceux-ci et les rediriger vers un gestionnaire d'invocation/intercepteur.

3. Comment traitons-nous cela?


Je suppose pas du tout? Je reçois totalement l'idée d'interdire le raffinement des méthodes et les mots-clés default/final, mais cela entrave RMI/proxies pour les classes.

4. Les proxies pour les classes sont-ils une mauvaise idée?


Et oui, il y a tellement d'autres questions que je suis en train de penser au sujet et enquête sur: JS mise en œuvre, les interfaces et les méthodes par défaut, etc.

Ces points semblent être les plus pertinents au moment, Commençons donc ici.

Répondre

1

Vous pouvez essayer d'utiliser ce module, j'ai écrit:

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

Sinon, si vous ciblez uniquement la machine virtuelle Java, vous pouvez simplement utiliser Java de Proxy directement.

0

Au cours d'autres recherches, je trouve:

1. proxies font actuellement partie du Ceylan 1.4 étape (questions concernant les procurations).

3. En activant le mode EE pour le compilateur ceylon, supprime le mot-clé final. De ce point sur la solution que j'ai trouvé fonctionne comme prévu et est exactement la même que celle fournie par Gavin.