Когда модуль ceylon импортирует «java.base» «8», он не видит исходные классы java.lang, но получает что-то еще.Сопоставление между классами оболочки Java и базовыми типами Ceylon
Так что, когда я хочу, чтобы синтаксический анализ из строки java в целое число java, я должен вывести строку java в строку ceylon и затем проанализировать ее в java integer.
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.lang.Integer или java.lang.Boolean и Ceylon, , поэтому эти преобразования должны выполняться явно, вызывая, например, intValue() или booleanValue(), или явно , создавая экземпляр класса-оболочки, как и в Java при преобразовании между примитивным типом Java и его классом-оболочкой. "
Так что, будучи сложным, он все еще работает. Но что я могу сделать, когда хочу прямое преобразование между типами Java, не связанными с String.
Это вызывает проблему, потому что нет простого аналога t.string в ceylon, например. нет «t.int» или «t.float».
Итак, есть конверсия между java и ceylon. Но цена высокая: прямое преобразование (литье или разбор) между типами Java теряется.
Итак, пожалуйста, покажите, как достичь прямого преобразования между java-типом (примитивным и обернутым). Я не говорю о массивах и других материалах, содержащихся в ceylon.interop.java.
Это не легко найти вокруг в java.lang API, потому что правила отображения типа применяется incompletly:
JI ji = JI.valueOf(t.string);
С одной стороны, «valueOf» ожидает ввод Цейлона, но с другой стороны, возвращает значение java. Почему не то же самое, что в исходном java.lang, т. Е. Только преобразование типов java? Существуют ли интуитивные правила?
Не могли бы вы дать полную документацию о различиях между оригинальным java.lang и java.lang, как видно из ceylon?
Как я могу получить полную документацию java.base, как видно из ceylon (когда не работает в eclipse), генерируя ее из отражения ...?
... и как я могу разобрать строку Java вом для Java межд? – Michael
... и, вероятно, важно уточнить, что означает «сопоставление». Странно, что всплывающие подсказки в eclipse показывают подписи из java.lang с типами ceylon. Можно было бы ожидать оригинального, а затем автоматического броска. Я думаю, было бы лучше сказать людям, что нет отливки - вместо этого java.base адаптируется к ceylon среде без возможности кастования типов. – Michael
@ user3464741 либо 'JInteger.parseInt (jstring.string)', либо использовать функцию 'parseInteger()' Ceylon и 'assert' результат до' Integer'. –