2011-06-04 194 views
9

我是Scala的新手,目前在一個涉及Java和Scala模塊的項目上工作。現在我想使用byte []類型的參數從Java調用Scala方法。如何將Java字節數組轉換爲Scala字節數組?

斯卡拉方法有簽名:def foo(data: Array[Byte])

的Java調用看起來像這樣:foo(x),其中x的類型byte[]

IDE將告訴我它不可能的:

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

作爲附加約束,不優選改變Scala的方法。在Java方面,我嘗試使用Byte[],但這並沒有解決問題。必須存在一些轉換?

+0

你在用什麼IDE? Intellij沒有問題。 – sourcedelica 2011-06-04 16:06:31

+0

你使用2.8或更高版本? 'Array [Byte]'_is_'byte []'從2.8開始,所以如果你的IDE抱怨你的IDE是錯誤的。 – 2011-06-04 16:17:51

+0

我正在使用Eclipse Helios 3.6.2並安裝了用於Eclipse 2.0.0-beta4的Scala IDE。該項目是在Maven模塊中組織的,其中Scala和Java模塊都包含scala-library-2.9.0作爲Maven依賴項。我注意到Scala IDE有時會做一些奇怪的事情 - 比如在包資源管理器中顯示想象中的警告和錯誤,但通常清理和重建項目會有所幫助(我已經嘗試過這種情況)。 – mtsz 2011-06-04 16:27:43

回答

4

正如其他人指出的,轉換沒有問題。我的IDE表現錯誤,並顯示沒有問題編譯的虛構錯誤。這時接收方法在主方法在下面的代碼中調用標有錯誤:

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

但這個代碼,它體現了我的問題,編譯罰款,併產生預期的結果:

的Java:

package stackOverflow; 

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

斯卡拉:

package stackOverflow 

import stackOverflow._ 

class ScalaByteReceiver{ 

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

所以Java和Scala很好地相互理解。

1

我試圖重現您的錯誤,但它按預期運行。 使用Scala 2.9.0和SBT

java代碼運行:

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代碼:

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) 
} 

輸出:[B @ 6ef38f6f

此編譯和運行。這不是你問的嗎?隨時發表評論。

+0

「這不是你問的問題嗎?」 - 差不多:) ...你將Scala'Array [Byte]'傳遞給期望'byte []'的Java(構造函數)方法,並且我正在尋找另一個方向的解決方案。但是你成功展示了這個工作正常。我確信我的IDE行爲錯誤,實際上轉換似乎沒有問題。我實施了一個工作示例,我將在第二個帖子中發帖,該帖子標記有錯誤,但會編譯併產生預期結果。但是,感謝您的代碼,我冒昧地將其用作工作示例的基礎。 – mtsz 2011-06-04 18:08:16

相關問題