原始Java:
FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();
Filter idFilter = ff.id(ff.featureId("100"));
Clojure的:
(let [^FilterFactory2 ff (CommonFactoryFinder/getFilterFactory2)
^Filter id-filter (.id ff (.featureId ff "100"))]
(do something...))
当我运行时,我得到IllegalArgumentException No matching method found: id for class org.geotools.filter.FilterFactoryImpl clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:80)
我知道这意味着无法为id
找到方法ff
。我搜索了docs并且有一个Id
属性。我查看了Clojure Java Interop docs,并说点符号(.id ff)
应该可以用于访问Java属性。我不确定如何更改我的代码以获得正确的结果。我对Clojure很好,但对Java知之甚少。
Re var length Java args:
据我所知,这个问题与变长Java参数无关,因为主fn ff.id(ff.featureId("100"));
只接受一个参数(ff.featureId("100")
),该参数的计算结果为String
。