以下代码
(-> (.getField (Class/forName
"ccg.flow.processnodes.text.retrievers.Dictionary.Dictionary")
"wordsTuples") .getType)
告诉我wordsTuples
是java.util.ArrayList
。但我希望能够学到的是它是一个 ArrayList,其元素类型为String[]
,因为它碰巧被声明为:
public class Dictionary extends ProcessNode {
public ArrayList<String[]> wordsTuples;
public ArrayList<String> words;
...
有没有办法获得&#34;类型提示&#34;在Clojure中以编程方式提供信息?
答案 0 :(得分:0)
您可以根据列表中的数据使用简单的黑客。
E.g。你有一些字符串列表:
(def lst (java.util.ArrayList. ["my" "list" "of" "strings"]))
然后你可以获得项目类型:
(if (and (instance? java.util.List lst)
(not (.isEmpty lst)))
(.getName (.getClass (.get lst 0))))
这种解决方法的缺点是你无法获得freakhill提到的关于清空的清单b / c的反射信息,但谁关心空列表;)?
希望这有帮助。
答案 1 :(得分:0)
感谢您的评论,我在问题mixIn上找到了this answer。从那里,我的示例代码的简单修改现在可以按预期工作:
#<ParameterizedTypeImpl java.util.ArrayList<java.lang.String[]>>
返回:
{{1}}