首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java包装类与锡兰基本类型之间的映射

Java包装类与锡兰基本类型之间的映射
EN

Stack Overflow用户
提问于 2016-08-01 06:57:35
回答 1查看 119关注 0票数 2

当一个锡兰模块导入"java.base“"8”时,它看不到原始的java.lang类,但是它得到了其他的东西。

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

module.ceylon:

代码语言:javascript
运行
复制
native("jvm")
module mod "1.0.0" {
    import java.base "8";   
}

run.ceylon:

代码语言:javascript
运行
复制
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 ??? 

我引用又是互操作/ Gotcha!的话

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

所以,虽然很复杂,但仍然有效。但是,当我希望在不涉及字符串的java类型之间进行直接转换时,我能做什么。

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

所以,java和锡兰之间有一个转换。但是代价很高: java类型之间的直接转换(强制转换或解析)丢失了。

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

在java.lang api中很难找到,因为类型映射规则的应用并不复杂:

代码语言:javascript
运行
复制
  JI ji = JI.valueOf(t.string);

一方面,"valueOf“需要一个锡兰输入,另一方面,它返回一个java值。为什么不与原始的java.lang相同,即只在java类型之间进行转换?有直觉的规则吗?

你能给出一个完整的文件,在原始的java.lang和java.lang之间的差异,从锡兰?

如何从锡兰获得完整的java.base文档(当不在eclipse中工作时),通过反射生成一个.?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-01 09:43:06

我不知道怎么回答你的问题,因为你说了很多,其实不是一个问题,然后你也问了几个问题。但这就是:

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

代码语言:javascript
运行
复制
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包装类的构造函数或静态valueOf方法。若要返回,请使用intValue()

不完整地应用类型映射规则:

他们不是。规则是:j.l.String和原语类型(intdouble等)映射到它们的锡兰等价物。所有其他类型-包括

Java的包装类(如java.lang.Integer或java.lang.Boolean )和锡兰基本类型之间没有映射,

包装类-没有映射。

(编辑:在一个关于ceylon.language::Integer…的问题中编辑OP这不是Java类型,也不是包装器类型。完全是这样的。)

因此,Java签名java.lang.Integer valueOf(java.lang.String)被映射到锡兰签名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被映射,但是包装类java.lang.Integer没有。这正是文档告诉您的。

你能给出一个完整的文件,在原始的java.lang和java.lang之间的差异,从锡兰?

http://ceylon-lang.org/documentation/1.2/reference/interoperability/type-mapping/

如何从锡兰获得完整的java.base文档(当不在eclipse中工作时),通过反射生成一个.?

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38692699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档