Вы можете только сделать это, и это достаточно сложно, что вы, вероятно, этого не хотите.
Что вы не можете do - написать класс Java, который магически интерпретируется как получатели и сеттеры Scala. Причина в том, что Scala вводит информацию в файл класса, который требуется для своих геттеров и сеттеров (например, есть нулевые блоки параметров или один пустой блок параметров - это различие, которое не сохраняется на JVM (или на Java)).
Что вы можете сделать, это использовать Java для реализации Scala определенного интерфейса (то есть черта):
// GetSetA.scala
trait GetSetA { def a: Int; def a_=(a: Int): Unit }
// JavaUsesGSA.java
public class JavaUsesGSA implements GetSetA {
private int a = 0;
public int a() { return a; }
public void a_$eq(int a) { this.a = a; }
}
То, что вы не можете сделать даже так, это использовать класс непосредственно (снова, потому что Java не добавляет соответствующую информацию аннотаций для Scala):
scala> j.a = 5
<console>:8: error: reassignment to val
j.a = 5
, но так как оно делает реализовать признак успешной LY, вы можете использовать его по своему желанию, когда оно введено в качестве признака:
scala> (j: GetSetA).a = 5
(j: GetSetA).a: Int = 5
Так что это довольно неоднозначным. Не совершенным никоим образом, но он может быть достаточно функциональным, чтобы помочь в некоторых случаях.
(Другой альтернативой, конечно же, является обеспечение неявного преобразования из класса Java в тот, который имеет геттер/сеттер, который ссылается на реальные методы класса Java, это работает даже тогда, когда вы не можете Java наследует от Scala)
(Edit:. конечно, нет важнейших причин, что компилятор должен действовать таким образом, можно утверждать, что интерпретация Java определенных пар геттер/сеттер, как если бы они были Scala те (например, если classfile явно не говорит, что это от Scala) является хорошим кандидатом на усовершенствование функции для улучшения взаимодействия Java.)
Я много работаю с EMF (model2model, transform2text transform), поэтому я подумал, что сделаю код немного более элегантным с функцией = значение вместо setFeatute (значение). – fikovnik