Java和x27之间的映射;s包装类和Ceylon基本类型

Java和x27之间的映射;s包装类和Ceylon基本类型,java,ceylon,Java,Ceylon,当一个ceylon模块导入“java.base”“8”时,它看不到原始的java.lang类,但它会得到一些其他的类 因此,当我想要从java字符串解析为java整数时,我必须将java字符串转换为ceylon字符串,然后将其解析为java整数 模块.锡兰: native("jvm") module mod "1.0.0" { import java.base "8"; } run.ceylon: import java.lang{ JI = Integer, JS =

当一个ceylon模块导入“java.base”“8”时,它看不到原始的java.lang类,但它会得到一些其他的类

因此,当我想要从java字符串解析为java整数时,我必须将java字符串转换为ceylon字符串,然后将其解析为java整数

模块.锡兰:

native("jvm")
module mod "1.0.0" {
    import java.base "8";   
}
run.ceylon:

import java.lang{
  JI = Integer, 
  JS = String,
}



  // strange:
  // java String constructor expects ceylon strings
  // in pseudo dotted ceylon : java.lang.String(ceylon.language.String s)
  JS t  = JS("fdsf" of String);

  // very strange:
  // javas base library expects ceylon base types:
  // java.lang.Integer.valueOf(ceylon.language.String s)


  JI ji = JI.valueOf(t.string);

  // Where t is a java String.

  // strange like an elephant:
  // JI.valueOf(t.string) returns a java type.
  // for some purposes it's ok, 
  // but where can I buy the complete documentation ??? 
我引用:

Java的包装类如Java.lang.Integer或Java.lang.Boolean与Ceylon基本类型之间没有映射, 因此,这些转换必须通过调用intValue()或booleanValue()或显式执行 实例化包装器类,就像在Java中在Java基元类型及其包装器类之间转换时所做的那样。”

所以,虽然很复杂,但它仍然有效。但是当我想要的时候,我能做什么呢 不涉及字符串的java类型之间的直接转换

这导致了一个问题,因为锡兰没有简单的t.string模拟,例如没有“t.int”或“t.float”

因此,java和ceylon之间有一个转换,但代价很高:java类型之间的直接转换(转换或解析)丢失了

所以,请演示如何实现java类型(原语和包装)之间的直接转换。我不是在谈论数组和ceylon.interop.java中包含的其他内容

在java.lang api中不容易找到,因为类型映射规则的应用不完全:

  JI ji = JI.valueOf(t.string);
一方面,“valueOf”需要ceylon输入,但另一方面它返回java值。 为什么不与原始java.lang中的相同,即仅在java类型之间进行转换?是否有直观的规则

您能提供一份完整的文档说明原始java.lang和从锡兰看到的java.lang之间的差异吗


我如何从ceylon(不在eclipse中工作时)获得java.base的完整文档,从反射生成一个…?

我不知道如何回答你的问题,因为你说了很多其实不是问题的话,然后你也问了几个问题。但下面是:

所以,请演示如何实现java类型(原语和包装)之间的直接转换。我不是在谈论数组和ceylon.interop.java中包含的其他内容

您可以使用Java包装类的构造函数或静态
valueOf
方法。若要转换回,请使用
intValue()

未完全应用类型映射规则:

  JI ji = JI.valueOf(t.string);
它们不是。规则是:
j.l.String
,基本类型(
int
double
等)映射到它们的锡兰等价物。所有其他类型–包括

Java的包装类如Java.lang.Integer或Java.lang.Boolean与Ceylon基本类型之间没有映射

包装器类–未映射

(编辑:OP在一个关于锡兰的问题中编辑。language::Integer…这不是Java类型,也不是包装器类型。它就是这样。)

因此,Java签名
Java.lang.Integer valueOf(Java.lang.String)
映射到Ceylon签名
Java.lang::Integer valueOf(Ceylon.language::String)
,因为
java.lang.String
已映射,而
java.lang.Integer
未映射。
Integer
构造函数从
java.lang.Integer Integer(int)
映射到
java.lang::Integer(ceylon.language::Integer)
,因为基本类型
int
已映射,但包装类
java.lang.Integer
未映射。这正是文档告诉您的

您能提供一份完整的文档说明原始java.lang和从锡兰看到的java.lang之间的差异吗

如何从ceylon(不在eclipse中工作时)获得java.base的完整文档,并从反射生成一个文档


我不认为这是可用的,尽管它可能会有用…

…我如何将vom java字符串解析为java int?…澄清什么是“映射”可能很重要“意思是。eclipse中的工具提示显示来自java.lang的带有ceylon类型的签名,这看起来很奇怪。人们会期待原作,然后是自动演员。我认为最好告诉人们没有强制转换,而java.base适合锡兰环境,没有强制类型转换的可能性。@user3464741要么
JInteger.parseInt(jstring.string)
,要么使用锡兰的
parseInteger()
函数和
assert
将结果归结为
Integer
。“映射”的意思是:Ceylon中不存在Java类型
int
。当它出现在Java签名中时,我们用Ceylon类型
Ceylon.language::Integer
表示它。当您说您期望“原始”…那会是什么?
int
在锡兰不存在。这就是为什么它必须映射到确实存在的锡兰类型–
锡兰。语言::Integer