我很难理解为什么一些公共功能显然不可用,尽管至少有一个其他功能可用.我举的例子来自Klaxon,但我怀疑我的预期和Kotlin的实际工作方式之间存在一些不匹配,而且它并不是Klaxon所特有的.
我在Ubuntu 16.04系统上使用命令行解释器.$j
是包含Klaxon和许多其他内容的JAR文件的路径.如您所见,我正在使用Kotlin 1.9.20.文件foo.json
仅包含{ "foo" : 1234, "bar": null, "baz": [11, 22, 33, 44] }
.
$ kotlin -cp $j
Welcome to Kotlin version 1.9.20 (JRE 17.0.8+9-LTS-211)
Type :help for help, :quit for quit
>>> val x = com.beust.klaxon.Parser.default ().parse ("foo.json")
>>> val y = x as com.beust.klaxon.JsonObject
>>> y.get ("baz")
res2: kotlin.Any = JsonArray(value=[11, 22, 33, 44])
到目前为止,一切都很好;这正是我希望看到的.现在try 其他getSomething
个函数.
>>> y.getKeys ()
error: unresolved reference: getKeys
y.getKeys ()
^
>>> y.getSize ()
error: unresolved reference: getSize
y.getSize ()
^
>>> y.getMap ()
error: unresolved reference: getMap
y.getMap ()
^
我不明白--我有一个期望类的对象,
>>> y::class
res6: kotlin.reflect.KClass<out com.beust.klaxon.JsonObject> = class com.beust.klaxon.JsonObject (Kotlin reflection is not available)
>>>
我命名的方法都存在于类中,从我所知道的:
$ javap -cp $j com.beust.klaxon.JsonObject | grep get
public final java.util.Map<java.lang.String, java.lang.Object> getMap();
public java.util.Set<java.util.Map$Entry<java.lang.String, java.lang.Object>> getEntries();
public java.util.Set<java.lang.String> getKeys();
public int getSize();
public java.util.Collection<java.lang.Object> getValues();
public java.lang.Object get(java.lang.String);
public final java.lang.Object get(java.lang.Object);
有人能解释一下我在这里看到了什么吗?我该怎么打getKeys
、getMap
等?