2011-06-04 32 views
9

Scala'da yeniyim ve şu anda hem Java hem de Scala modüllerini içeren bir projede çalışıyorum. Şimdi, bir bayt [] tipi parametresi kullanarak Java'dan bir Scala yöntemini çağırmak istiyorum.Java bayt dizisini Scala bayt dizisine nasıl dönüştürebilirim?

Scala yöntemi imzası vardır: def foo(data: Array[Byte]) Java çağrı şöyle

: foo(x) x türü byte[] sahiptir.

: IDE olası değil bana söyler:

The method foo(Array) in the type Bar is not applicable for the arguments (byte[]) 

o Scala yöntemini değiştirmek tercih edilmez, ek bir kısıtlama olarak. Java tarafında Byte[] kullanmayı denedim, ancak bu sorunu çözmedi. Bazı dönüşümler olmalı?

+0

Hangi IDE'yi kullanıyorsunuz? Intellij'in sorunu yok. – sourcedelica

+0

2.8 veya üstü kullanıyor musunuz? 'Array [Byte] '_is_' byte [] '2,8 olarak, yani IDE'nizden şikayetçi olursanız IDE'niz yanlıştır. –

+0

Eclipse 2.0.0-beta4 için yüklü Scala IDE ile Eclipse Helios 3.6.2 kullanıyorum. Proje, hem Scala hem de Java modülünün Malaya bağımlılığı olarak scala-library-2.9.0'ı içerdiği Maven modüllerinde düzenlenmiştir. Scala IDE'nin bazen garip şeyler yaptığını fark ettim - paketin kaşifinde hayali uyarılar ve hatalar göstermek gibi, fakat genellikle temizlik ve projenin yeniden inşası yardımcı oluyor (bu durumda zaten denedim). – mtsz

cevap

4

Diğerlerinin belirttiği gibi, dönüşümde sorun yoktur. IDE'm hatalı çalışıyor ve problemsiz derleme yapan hayali hataları gösteriyor. Soruma örnek teşkil iyi derler ve beklenen bir sonuç verir

The method receive(Array) from the type ScalaByteReceiver refers to the missing type Array

Ama bu kod,:

Şu anda kodunu aşağıdaki ana-yöntemde alma Yöntemi çağrı hatası ile işaretlenmiştir

Java:

package stackOverflow; 

public class JavaByteSender {  
    public static void main(String... args) { 
    new ScalaByteReceiver().receive(new byte[4]); 
    } 
} 

Scala:

package stackOverflow 

import stackOverflow._ 

class ScalaByteReceiver{ 

    def receive(bytes: Array[Byte]) {  
    println(bytes.length); 
    // prints 4 
    } 
} 

Java ve Scala birbirlerini iyi anlıyorlar.

1

Hatanızı yeniden oluşturmaya çalıştım ancak beklediğim gibi çalıştı. Scala 2.9.0 ve SBT

Java kodu ile çalıştırma:

package stackOverflow; 

public class ByteContainer { 

    private byte[] bytes; 

    public ByteContainer(byte[] bytes){ 
     this.bytes = bytes; 
    } 

    public byte[] getBytes() { 
     return bytes; 
    } 

    public void setBytes(byte[] bytes) { 
     this.bytes = bytes; 
    } 

} 

Scala kodu:

package stackOverflow 

import stackOverflow._ 

class ScalaByte{ 
    val bytes:Array[Byte] = "this is my test".getBytes() 
} 

object ByteUser extends App{ 
    val b = new ByteContainer((new ScalaByte()).bytes) 
    val s = b.getBytes() 
    println(s) 
} 

çıkışı: [B 'Bu derler ve çalışır

6ef38f6f. Sorduğun bu değil mi? Yorum yapmaktan çekinmeyin.

+0

"Bu senin hakkında ne soruyorsun?" - Neredeyse :) ...Scala 'Array [Byte]' i byte [] '' bekler bir Java (yapıcı) yöntemine aktarırsınız ve çözümü diğer yöne bakıyordum. Ama başarılı bir şekilde gösterdin, bu da iyi çalışıyor. IDE'imin hatalı davrandığına inanıyorum, aslında dönüşümde sorun yok gibi görünüyor. Bir saniyede yayınlayacağım, hatalarla işaretlenen ancak beklenen sonuçları veren ve derleyen bir çalışma örneği uyguladım. Ama kodunuz için teşekkürler, çalışma örneği için bir üs olarak kullanma hürriyeti aldım. – mtsz

İlgili konular