2011-12-29 4 views
4

私が書く場合:ScalaではScalaから「プリミティブJava文字」を返す方法は?

def getShort(b: Array[Byte]): Short 

を、私は結構です、Javaのプリミティブなshortを取得します。しかし、私は書く場合:

デフGETCHAR(B:配列[バイト]):チャー

私は罰金ではありませんscala.Charオブジェクトを取得します。そして、もし私が書いたら:

def getChar(b: Array[Byte]): Character 

私はどちらも良いとは言えません。

Scala "Char"がJava "char"でなく、Scala "Character"がJava "char"でない場合、残っているのは何ですか?

答えて

10

あなたは間違っています。 Char Javaプリミティブcharです。お守り:

scala> class IsPrimitiveChar { 
    | def myChar(i: Int): Char = i.toChar // I am clearly a Char, whatever that is! 
    | } 
defined class IsPrimitiveChar 

scala> :javap IsPrimitveChar 
Compiled from "<console>" 
public class IsPrimitiveChar extends java.lang.Object implements scala.ScalaObject{ 
    public char myChar(int); // Look, it returns a char! 
    public IsPrimitiveChar(); 
} 


scala> :javap -c -private IsPrimitiveChar 
Compiled from "<console>" 
public class IsPrimitiveChar extends java.lang.Object implements scala.ScalaObject{ 
public char myChar(int); 
    Code: 
    0: iload_1 
    1: i2c    // Look, primitive int to char conversion in bytecode! 
    2: ireturn   // And that's all! 

一つは道で、仕事への:javapのクラスパス上のtools.jarを持っている必要があります。これはSun/Oracle JVMに含まれています。

+0

*私は間違っていません。 Eclipseは!とても腹立たしい!それは私にスカラを得るというエラーを与えます。チャーの代わりにチャーが、しかしコンソールでそれは動作します! –

+0

ファイルがまだ存在しない場合(まだ修正されておらず、IDEを使用したい場合)、バグレポートをファイルに保存することをお勧めします。 –

-1

java.lang.Characterはほとんどの目的でJavaのプリミティブと同じように優れています。あなたが本当にプリミティブを必要とする場合は、ただオブジェクトからcharValue()を返すことができます

+0

私の主張は、すべての文字に対してオブジェクトを作成したくないということでした。結局のところ、私はそれを他のすべての原始的なタイプに対して行う必要はありません。 –

3

私は両方ともプリミティブに解決すると信じています。

scala> def getShort(b: Array[Byte]): Short = 0 
getShort: (b: Array[Byte])Short 

scala> getShort(Array(1)) 
res10: Short = 0 

scala> getShort(Array(1)).getClass().getName() 
res11: java.lang.String = short 

scala> def getChar(b: Array[Byte]): Char = 'a' 
getChar: (b: Array[Byte])Char 

scala> getChar(Array(1)) 
res13: Char = a 

scala> getChar(Array(1)).getClass().getName() 
res14: java.lang.String = char 
+0

はい、Eclipseは私を再び楽しませました。 –

3

ScalaのCharObjectと同じものであるだけでAnyRefのように、charと同じものである、scala.Charです。 JVMにはchar、スカラにはscala.Charです。

関連する問題