ceylon モジュールが "java.base" "8" をインポートすると、元の java.lang クラスは表示されませんが、別のものを取得します。
したがって、Java 文字列から Java 整数への解析が必要な場合は、Java 文字列をセイロン文字列にキャストしてから、それを Java 整数に解析する必要があります。
モジュール.セイロン:
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 を引用しています。:
java.lang.Integer や java.lang.Boolean などの Java のラッパー クラスと Ceylon の基本型の間にはマッピングがないため、これらの変換は、intValue() や booleanValue() などを呼び出すか、明示的にインスタンス化することによって明示的に実行する必要があります。 Javaプリミティブ型とそのラッパークラスの間で変換するときにJavaで行うのと同じように、ラッパークラス。」
そのため、複雑ではありますが、それでも機能します。しかし、String を含まない Java タイプ間の直接変換が必要な場合はどうすればよいでしょうか。
これは問題を引き起こします。なぜなら、セイロンには t.string に単純な類似物がないからです。たとえば、"t.int" や "t.float" はありません。
したがって、java と ceylon の間の変換があります。ただし、代償は高くなります。Java 型間の直接変換 (キャストまたは解析) が失われます。
したがって、Java タイプ (プリミティブとラップ) 間の直接変換を実現する方法を示してください。私は配列や ceylon.interop.java に含まれるその他のものについて話しているのではありません。
タイプ マッピング ルールが不完全に適用されているため、java.lang API を見つけるのは簡単ではありません。
JI ji = JI.valueOf(t.string);
一方では「valueOf」はセイロン入力を想定していますが、他方では Java 値を返します。元の java.lang と同じ、つまり Java 型のみの変換ではないのはなぜですか? 直感的なルールはありますか?
セイロンから見た元の java.lang と java.lang の違いの完全なドキュメントを教えてください。
ceylon (Eclipse で動作していない場合) から見た java.base の完全なドキュメントを取得するにはどうすればよいですか?