如何从Scala返回“原始Java char”?

时间:2011-12-29 15:16:23

标签: java scala char

如果我写:

def getShort(b: Array[Byte]): Short
在Scala中,我在Java中获得了原始的简短,这很好。但如果我写:

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

我得到一个scala.Char对象,这不对。如果我写:

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

我得到了一个java.lang.Character,这也不错。

如果Scala“Char”不是Java“char”,而Scala“Character”不是Java“char”,那还剩下什么?

4 个答案:

答案 0 :(得分:10)

你错了; Char Java原始字符。观察:

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中。

答案 1 :(得分: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

答案 2 :(得分:3)

Scala Charscala.Char,与char相同,就像AnyRefObject相同。对于JVM,它是char,对于Scala,它是scala.Char

答案 3 :(得分:-1)

对于大多数用途,java.lang.Character和java一样好。如果你真的需要原语,你可以只返回对象的charValue()