2,9. * Projemi 2.10 güncelleştiriyorum. Değer türleri için mükemmel adaylar gibi görünen temel türleri (açıları, uzunlukları, vb.) Için birkaç dersim var. Ne yazık ki, bu türleri kullanan Java kodum derlenmiyor ve nedenini anlayamıyorum. Bunu çok basit bir kod setine göre basitleştirdim. Herhangi bir öneri çok takdir edilecektir.Scala Kullanarak 2.10.1 Java'da Değer Türleri
Açı sınıf tanımı ben derleme yaparken, bu hatayı olsun (skalası) (acı Java ile yazılmış)
package com.example.units
class Angle(val radians : Double) extends AnyVal
{
def degrees = radians * 180.0/math.Pi
}
object Angle
{
val Zero = new Angle(0)
}
Açı Testi Vaka
package com.example.units;
import junit.framework.Assert;
import org.junit.Test;
public class AngleTest
{
@Test
public static void TestZero()
{
Angle a = Angle.Zero();
Assert.assertEquals(a.degrees(), 0, 1E-9);
}
}
:
AngleTest.java:19 incompatible types
found :double
required: com.example.units.Angle
Angle a = Angle.Zero();
^
Angle.Zero'nun bir açı değil, bir çift olarak geri döndüğü gibi. Kutu/kutulama yöntemleri eklemeyi denedim, ancak aynı hatayı almaya devam ettim. Yine, herhangi bir yardım büyük takdir edilecektir.
Örneğindeki yanıt için teşekkürler. Okunabilirlik sınıflarımda (Angle.fromDegrees(), Angle.fromRadians(), vb.) Okunabilirliği geliştirmek için fabrika yöntemlerini oldukça kullanıyorum. Şu anda bu yöntemlerin tümü, yukarıda ana hatlarıyla belirtilen aynı soruna sahiptir. Bana göre bu işi yapmanın bir yolu olmalı. – fbl
Çalışması için bir yol görmeyi kesinlikle merak ediyorum. Birkaç geçici çözümü denedikten sonra, hiçbir şey zarif görünmüyor (örneğin, Java testlerinizde .Zero() çağrısından aldığınız değeri bir Açı'da sarabilirsiniz, ancak bu da okunabilirliği azaltır). Bence buradaki temel neden, Scala'nın sınıf sınıflarının, normal sınıflar olarak Java ile aynı birlikte çalışabilirlik için tasarlanmamış olmasıdır; Scala kodunuzu basitleştirmek için sadece bir derleme zamanı soyutlamasıdır. Davanızda düzenli sınıfları kullanmanızı öneriyorum. –
Maalesef aynı sonuca vardım. Bu bir hata değilse, o zaman en azından tasarım kusuru w/değer türleridir. Scalas'ın güçlü yönlerinden biri, doğal olarak w/Java koduyla birlikte çalışma yeteneğidir. Sıkılıncaya kadar bunları kullanmaktan kaçınıyorum. – fbl