저의 목표는 형질 혼합을 사용하여 기존 자바 클래스 내에서 스칼라 코드를 향상시키는 것입니다. 예를 들어 java.awt.Rectangle.translate (dx, dy)와 같은 메소드를 java.awt.geom.Ellipse2D 클래스에 추가 할 수 있습니다. 타원 구성 할 때특성을 사용하여 Java 클래스를 향상시키는 방법, 내부 특성을 Java 필드로 선언하는 방법은 무엇입니까?
trait RectangleLike {
var x: Double // abstract vals to correspond to java class fields
var y: Double // I need these vars to refer to them inside translate method
def translate(dx: Double, dy: Double) {
x = x + dx
y = y + dy
}
// more concrete trait methods here
} // defines without errors in scala REPL
는 그런 특성을 사용합니다 :이를 위해 나는 다음과 같은 특성 만들
그러나val egg = new java.awt.geom.Ellipse2D.Double(5, 10, 20, 30) with RectangleLike
을 내가 스칼라 REPL에 위의 스크립트를 실행할 때를 나는 다음과 같은 출력을 얻을
<console>:8: error: overriding variable x in trait RectangleLike of type Double;
variable x in class Double of type Double has incompatible type;
other members with override errors are: y
val egg = new java.awt.geom.Ellipse2D.Double(5, 10, 20, 30) with RectangleLike
이 오류는 스칼라가 개인 필드 및 getter/setter 메소드 쌍으로 vars를 구현하는 방식 때문인 것으로 의심됩니다. 내가 할 수있는 일을 성취하려고 노력하고 있습니까? 특성에 자바 클래스 필드를 정의한 다음 구체적인 특성 메서드 내부에서이를 참조 할 수있는 또 다른 방법이 있습니까? 사전에
감사 잭 디 마스
@forNelton impressive! 정말 고생 했어요. 고마워요. 암시 적 관점을 연구해야합니다. – ideathbird
당신을 진심으로 환영합니다. 응용 프로그램의 유형에 따라 첫 번째 방법이 더 적절할 수 있습니다. 왜냐하면 메서드 호출이 모든 암시 적 번거 로움없이 빠른 속도로 진행될 수 있기 때문입니다. – fotNelton