Java和x27之间的映射;s包装类和Ceylon基本类型
当一个ceylon模块导入“java.base”“8”时,它看不到原始的java.lang类,但它会得到一些其他的类 因此,当我想要从java字符串解析为java整数时,我必须将java字符串转换为ceylon字符串,然后将其解析为java整数 模块.锡兰: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 =
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
。