Scala-геттеры и сеттеры в классе Java
=====================================

Я хотел бы создать класс Java, который следует соглашению о методах установки / получения Scala.

Я попробовал следующий простой класс, но он не работает:

Но когда я пытаюсь получить доступ к нему из Scala:

и я получаю "переназначение на val" сообщение об ошибке. Я пытался найти это, но все проблемы, которые я нашел, где-то наоборот, от скалы до Java.

Как правильно это сделать?

Спасибо!

 и это достаточно сложно, что ты, вероятно, не хочешь.

Что ты Не может do - это написать простой Java-класс, который магически интерпретируется как геттеры и сеттеры Scala. Причина в том, что Scala встраивает информацию в файл класса, который требуется для его методов получения и установки (например, есть ли блоки с нулевым параметром или один пустой блок параметра - различие, которое не сохраняется в JVM (или в Java)).

Что тыможе do - использовать Java для реализации определенного Scala-интерфейса (т. е. черта):

Что ты Не может do, тем не менее, использует класс напрямую (опять же, потому что Java не добавляет соответствующую информацию аннотации для Scala):

 но так как это Делает успешно реализовать черту, вы можете использовать ее по своему усмотрению, когда она набрана как черта:

 Так что это скорее смешанная сумка. Несовершенно, но в некоторых случаях может быть достаточно функциональным, чтобы помочь.

 (Другая альтернатива, конечно, заключается в том, чтобы обеспечить неявное преобразование из класса Java в класс, который имеет метод получения / установки, который ссылается на реальные методы класса Java; это работает, даже если вы не можете получить наследование Java от Scala.)

 (Изменить: Конечно, нет критической причины, по которой компилятордолже действовать так; Можно утверждать, что интерпретация определенных парами getter / setter Java, как если бы они были Scala (т. е. если файл классов явно не говорит, что это из Scala), является хорошим кандидатом для улучшения возможностей для улучшения совместимости Java.)



 ты не сможешь. В Scala метод доступа должен быть методом без списка параметров, например`def a = _a`. Написание, например`def a() = _a` в Scala вызовет ту же ошибку, и вы не сможете определить метод без списка параметров в Java. Вы можете обмануть компилятор Scala, сгенерировав собственный`ScalaSignature`, но это вряд ли стоит того ...