【发布时间】:2016-08-06 02:39:11
【问题描述】:
当一个 ceylon 模块导入“java.base”“8”时,它看不到原始的 java.lang 类,但它得到了其他东西。
因此,当我想从 java 字符串解析为 java 整数时,我必须将 java 字符串转换为 ceylon 字符串,然后将其解析为 java 整数。
module.ceylon:
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 ???
我引用Ceylon:Interoperation / Gotcha again!:
Java 的包装类(如 java.lang.Integer 或 java.lang.Boolean)与 Ceylon 基本类型之间没有映射, 因此这些转换必须通过调用(例如,intValue() 或 booleanValue() 或显式调用)显式执行 实例化包装器类,就像在 Java 中在 Java 原始类型和它的包装器类之间进行转换一样。”
所以,虽然很复杂,但它仍然有效。但是当我想要的时候我能做什么 不涉及 String 的 java 类型之间的直接转换。
这会导致一个问题,因为在锡兰没有简单的 t.string 类比,例如没有“t.int”或“t.float”。
所以,java 和 ceylon 之间存在转换。但代价高昂:java类型之间的直接转换(cast或parse)丢失了。
所以请展示如何实现java类型(原始和包装)之间的直接转换。我不是在谈论 ceylon.interop.java 中包含的数组和其他内容。
在 java.lang api 中很难找到,因为类型映射规则应用不完整:
JI ji = JI.valueOf(t.string);
一方面,“valueOf”需要一个锡兰输入,但另一方面它返回一个 java 值。 为什么与原始 java.lang 中的不同,即仅在 java 类型之间进行转换?有直观的规则吗?
您能否提供一份完整的文档,说明原始 java.lang 和从锡兰看到的 java.lang 之间的差异?
如何获得从锡兰看到的 java.base 的完整文档(当不在 eclipse 中工作时),从反射生成一个...?
【问题讨论】: