Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何返回一个";“原始Java字符”;来自斯卡拉?_Java_Scala_Char - Fatal编程技术网

如何返回一个";“原始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再次取笑了我。