Java 的包装器 类 和 Ceylon 基本类型之间的映射
Mapping between Java's wrapper classes and Ceylon basic types
当 Ceylon 模块导入 "java.base" "8" 时,它看不到原始的 java.lang classes,但它得到了其他东西。
所以当我想要从 java 字符串解析为 java 整数时,我必须将 java 字符串转换为锡兰字符串,然后将其解析为 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 的包装器 class 之间没有映射,例如 java.lang.Integer 或 java.lang.Boolean 和 Ceylon 基本类型,
因此这些转换必须通过调用显式执行,例如,intValue() 或 booleanValue(),或通过显式
实例化包装器 class,就像您在 Java 中在 Java 基本类型和它的包装器 class 之间转换时所做的那样。"
所以,虽然很复杂,但它仍然有效。但是当我想要的时候我能做什么
java 类型之间的直接转换不涉及 String.
这会导致一个问题,因为在锡兰没有 t.string 的简单模拟,例如没有 "t.int" 或 "t.float".
因此,java 和锡兰语之间存在转换。但代价很高:java 类型之间的直接转换(转换或解析)丢失。
所以请展示如何实现 java 类型(原始类型和包装类型)之间的直接转换。我不是在谈论 ceylon.interop.java.
中包含的数组和其他内容
在java.langapi中不容易找到,因为类型映射规则应用不完整:
JI ji = JI.valueOf(t.string);
一方面"valueOf"需要锡兰输入,但另一方面returns需要java值。
为什么与原来的 java.lang 不同,即仅在 java 类型之间进行转换?有直观的规则吗?
您能否提供从锡兰看到的原始 java.lang 和 java.lang 之间差异的完整文档?
如何获得从锡兰看到的 java.base 的完整文档(当不在 eclipse 中工作时),从反射生成一个...?
我不确定如何回答你的问题,因为你说了很多不是真正的问题,然后你又问了几个问题。但是这里是:
So please show how to achieve a direct conversion between java type (primitive and wrapped). I'm not talking about arrays and other stuff contained in ceylon.interop.java.
import ceylon.language {
CInteger=Integer
}
import java.lang {
JInteger=Integer
}
shared void run() {
CInteger ci1 = 1;
JInteger ji1 = JInteger(ci1);
JInteger ji2 = JInteger.valueOf(ci1);
CInteger ci2 = ji1.intValue();
}
您可以使用 Java 包装器 class' 构造函数或静态 valueOf
方法。要转换回来,请使用 intValue()
.
type mapping rules are applied incompletly:
他们不是。规则是:j.l.String
和原始类型(int
、double
等)映射到它们的 Ceylon 等价物。所有其他类型 – 包括
中所述
There is no mapping between Java's wrapper classes like java.lang.Integer or java.lang.Boolean and Ceylon basic types,
包装器 classes – 未映射。
(编辑:OP 在关于 ceylon.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 Integer(ceylon.language::Integer)
,因为原始类型 int
已映射,但包装器 class java.lang.Integer
未映射.这正是文档告诉您的内容。
Could you please give a full documentation of the differences between the original java.lang and the java.lang as seen from ceylon?
http://ceylon-lang.org/documentation/1.2/reference/interoperability/type-mapping/
How can I get the complete documentation of java.base as seen from ceylon (when not working in eclipse), generating one from reflection... ?
我不认为这是可用的,尽管它可能会有用……
当 Ceylon 模块导入 "java.base" "8" 时,它看不到原始的 java.lang classes,但它得到了其他东西。
所以当我想要从 java 字符串解析为 java 整数时,我必须将 java 字符串转换为锡兰字符串,然后将其解析为 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 的包装器 class 之间没有映射,例如 java.lang.Integer 或 java.lang.Boolean 和 Ceylon 基本类型, 因此这些转换必须通过调用显式执行,例如,intValue() 或 booleanValue(),或通过显式 实例化包装器 class,就像您在 Java 中在 Java 基本类型和它的包装器 class 之间转换时所做的那样。"
所以,虽然很复杂,但它仍然有效。但是当我想要的时候我能做什么 java 类型之间的直接转换不涉及 String.
这会导致一个问题,因为在锡兰没有 t.string 的简单模拟,例如没有 "t.int" 或 "t.float".
因此,java 和锡兰语之间存在转换。但代价很高:java 类型之间的直接转换(转换或解析)丢失。
所以请展示如何实现 java 类型(原始类型和包装类型)之间的直接转换。我不是在谈论 ceylon.interop.java.
中包含的数组和其他内容在java.langapi中不容易找到,因为类型映射规则应用不完整:
JI ji = JI.valueOf(t.string);
一方面"valueOf"需要锡兰输入,但另一方面returns需要java值。 为什么与原来的 java.lang 不同,即仅在 java 类型之间进行转换?有直观的规则吗?
您能否提供从锡兰看到的原始 java.lang 和 java.lang 之间差异的完整文档?
如何获得从锡兰看到的 java.base 的完整文档(当不在 eclipse 中工作时),从反射生成一个...?
我不确定如何回答你的问题,因为你说了很多不是真正的问题,然后你又问了几个问题。但是这里是:
So please show how to achieve a direct conversion between java type (primitive and wrapped). I'm not talking about arrays and other stuff contained in ceylon.interop.java.
import ceylon.language {
CInteger=Integer
}
import java.lang {
JInteger=Integer
}
shared void run() {
CInteger ci1 = 1;
JInteger ji1 = JInteger(ci1);
JInteger ji2 = JInteger.valueOf(ci1);
CInteger ci2 = ji1.intValue();
}
您可以使用 Java 包装器 class' 构造函数或静态 valueOf
方法。要转换回来,请使用 intValue()
.
type mapping rules are applied incompletly:
他们不是。规则是:j.l.String
和原始类型(int
、double
等)映射到它们的 Ceylon 等价物。所有其他类型 – 包括
There is no mapping between Java's wrapper classes like java.lang.Integer or java.lang.Boolean and Ceylon basic types,
包装器 classes – 未映射。
(编辑:OP 在关于 ceylon.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 Integer(ceylon.language::Integer)
,因为原始类型 int
已映射,但包装器 class java.lang.Integer
未映射.这正是文档告诉您的内容。
Could you please give a full documentation of the differences between the original java.lang and the java.lang as seen from ceylon?
http://ceylon-lang.org/documentation/1.2/reference/interoperability/type-mapping/
How can I get the complete documentation of java.base as seen from ceylon (when not working in eclipse), generating one from reflection... ?
我不认为这是可用的,尽管它可能会有用……