2010-03-12 4 views
12

저는 최근 자바에서 스칼라로 일부 코드를 변환하여 언어를 가르치고 있습니다.

class Person() { 
    var name:String = "joebob" 
} 

지금 나는 내가 스칼라에 있었다면 것처럼 그래서 나는 점 표기법을 사용할 수 없습니다 자바에서 액세스를 원하는 :

우리가이 스칼라 클래스가 있다고 가정.

person = Person.new(); 
System.out.println(person.name()); 

과를 통해 그것을 설정 :

그래서 실행하여 내 VAR의 내용을 얻을 수 있습니다

Compiled from "Person.scala" 
public class Person extends java.lang.Object implements scala.ScalaObject{ 
    public Person(); 
    public void name_$eq(java.lang.String); 
    public java.lang.String name(); 
} 
:

person = Person.new(); 
person.name_$eq("sallysue"); 
System.out.println(person.name()); 

이것은 우리 사람 클래스은 javap이 보이는 진정한 원인을 보유

네, 제 자신의 getters/setter를 쓸 수는 있지만 클래스를 작성하는 것이 싫고 톤을 만들어 내지 못합니다. 나는 이미 그것들을 가지고 있다고 생각한다. 단지 _ $ eq 메쏘드의 별명을 바꾸고 싶다. (실제로 antlr과 같은 물건을 다루는 경우 악화됩니다. 그걸 피하기 위해 person.name _ \ $ eq ("newname")과 같이 보입니다.

참고 : 더 setter 메소드 내 수업이 참아보다는 채우기 위해 에게 그래서 당신은이 상황에서 어떻게 할 것인지

답변

16

당신은 스칼라의 콩 속성 주석을 사용할 수 있습니다

:.?

class Person() { 
    @scala.reflect.BeanProperty 
    var name:String = "joebob" 
} 

생성합니다 그 당신을 위해 getName과 setName (당신이 int를 필요로 할 때 유용하다. javabeans를 필요로하는 Java 라이브러리로 오류 처리)

관련 문제