Amacım, bir özellik karma kullanımı kullanarak varolan bir Java sınıfını iç scala kodunun geliştirilmesidir. Örneğin java.awt.Rectangle.translate (dx, dy) gibi java.awt.geom.Ellipse2D sınıfına bir yöntem eklemek. bir elips oluştururkenjava sınıflarını, özellikleri kullanarak, java alanlarının içerisine nasıl bildirileceğini geliştirin?
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
Sonra özelliği kullanmak: Bunun için aşağıdaki özelliği oluşturmak
: Ancakval egg = new java.awt.geom.Ellipse2D.Double(5, 10, 20, 30) with RectangleLike
ben scala repl yukarıdaki komut dosyası çalıştırdığınızda aşağıdaki çıktıyı almak
<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
Bu hatanın Scala'nın özel bir alan ve bir alıcı/ayarlayıcı yöntem çifti olarak varsayı uygulamasından kaynaklandığından şüpheleniyorum. Yapılabilirliği başarmaya çalıştığım şey mi? Java sınıfı alanlarını özellikte tanımlamanın ve sonra bunları beton özellik metotları içinde ifade etmenin başka bir yolu var mıdır? peşin
Teşekkür Jack Dimas
@forNelton etkileyici! Teşekkürler mil gerçekten bunun üzerinde sıkışmış. Örtülü görüşlerini incelemek zorundayım. – ideathbird
Rica ederim. Uygulamanızın türüne bağlı olarak, ilk yaklaşımın daha uygun olabileceğini düşünüyorum çünkü yöntem çağrıları, tüm örtülü güçlükler olmadan daha hızlı olabilir. – fotNelton