如何返回一个";“原始Java字符”;来自斯卡拉?
如果我写:如何返回一个";“原始Java字符”;来自斯卡拉?,java,scala,char,Java,Scala,Char,如果我写: def getShort(b: Array[Byte]): Short def getChar(b: Array[Byte]): Character 在Scala中,我得到了Java中的一个基本缩写,这很好。但如果我写: def getShort(b: Array[Byte]): Short def getChar(b: Array[Byte]): Character def getChar(b:Array[Byte]):Char 我得到一个scala.Char对象,这不好。
def getShort(b: Array[Byte]): Short
def getChar(b: Array[Byte]): Character
在Scala中,我得到了Java中的一个基本缩写,这很好。但如果我写:
def getShort(b: Array[Byte]): Short
def getChar(b: Array[Byte]): Character
def getChar(b:Array[Byte]):Char
我得到一个scala.Char对象,这不好。如果我写:
def getShort(b: Array[Byte]): Short
def getChar(b: Array[Byte]): Character
我得到了一个java.lang.Character,这也不好
如果Scala“Char”不是Java“Char”,Scala“Character”也不是Java“Char”,那么剩下什么呢?Java.lang.Character对于Java来说与大多数情况下的原语一样好。如果您真的需要原语,您只需返回charValue()off object,我相信两者都将解析为原语
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
你错了
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!
scala>类IsPrimitiveChar{
|def myChar(i:Int):Char=i.toChar//我显然是一个Char,不管那是什么!
| }
定义的类IsPrimitiveChar
scala>:javap IsPrimitveChar
从“”编译
公共类IsPrimitiveChar扩展了java.lang.Object,实现了scala.ScalaObject{
公共字符myChar(int);//看,它返回一个字符!
公共IsPrimitiveChar();
}
scala>:javap-c-private IsPrimitiveChar
从“”编译
公共类IsPrimitiveChar扩展了java.lang.Object,实现了scala.ScalaObject{
公共字符myChar(int);
代码:
0:iload_1
1:i2c//看,字节码中的原始int到char转换!
2:我回来了//就这些!
顺便说一句,你需要在类路径上有tools.jar才能工作:javap,它包含在Sun/Oracle JVM中。Scala的
Char
是Scala.Char
,它与Char
是一样的,就像AnyRef
与对象
是一样的。对于JVM来说,它是Char
,对Scala来说,这是Scala.Char
我的观点是,我不想为每个Char创建一个对象;毕竟,我不必为所有其他基本类型创建对象。我没有错。Eclipse是!太烦人了!它会给我一个错误,说我得到的是Scala.Char而不是Char,但在控制台它可以工作!如果不是,最好提交一个bug报告已经存在了(还没有修复,而且你喜欢使用IDE)。是的,Eclipse再次取笑了我。