Я хочу написать библиотеку RMI в/для Цейлона (поскольку пока не нашел).
Первое, что мне нужно, это прокси. В Java я использовал что-то вроде
Proxy.newProxyInstance(classLoader, interfaces, handler);
1. Есть ли что-то подобное на Цейлоне? (что-то не нашел)
Пытаясь написать что-то подобное самостоятельно, я наткнулся на этот решение для JVM с использованием манипуляций с байт-кодом. Шикарно и именно то, что я хочу.
Обратите внимание, что это может даже создать прокси для класса, а не только для интерфейса, как в Java. На Цейлоне это должно быть допустимо, так как здесь нет полей, и мы можем смоделировать весь класс с помощью вызовов методов.
2. Если создавать прокси для классов нельзя, просто скажите мне об этом. Кроме того, какова интуиция/будущее Цейлона в отношении прокси? Будут (нет) прокси?
В будущем с прокси у нас есть одна большая проблема:
На Цейлоне у нас есть ключевое слово default
, без него метод не может быть уточнен/перезаписан. Это также приводит к final
методам для скомпилированных выходных классов Java. Таким образом (даже не) манипулирование байтовым кодом может перезаписать их и перенаправить на обработчик/перехватчик вызова.
3. Как с этим справиться?
Я полагаю, что нет? Я полностью понимаю идею запрета уточнения методов и ключевых слов default
/final
, но это препятствует RMI/прокси для классов.
4. Являются ли прокси для классов плохой идеей?
И да, есть гораздо больше вопросов, над которыми я сейчас думаю и изучаю: реализация JS, интерфейсы и методы по умолчанию и т. д.
Эти пункты кажутся наиболее актуальными на данный момент, поэтому начнем с них.