我正在尝试为Clojure中的google adwords api编写一个包装器,但是却遇到了常量和接口问题。 java代码如下所示:
CampaignServiceInterface campaignService =
user.getService(AdWordsService.V201109.CAMPAIGN_SERVICE);
通常你可以用Clojure中的常量来调用常量。 (数学/ PI)但是当我写道:
(def user (AdWordsUser. ))
(.getService user (AdWordsService/V201109/CAMPAIGN_SERVICE))
我只是得到了#34;没有这样的命名空间"。 另外,我对如何正确实现接口有点无能为力。我想我应该使用" reify"但我卡住了
(defn campaign-service [ ]
(reify
com.google.adwords.api.v201109.cm.CampaignServiceInterface
(get [this] ??))))
答案 0 :(得分:4)
如果我正确阅读,AdWordsService.V201109.CAMPAIGN_SERVICE
是AdWordsService类内部类的静态常量。
要访问内部类,您需要使用java的内部名称修改方案**;使用$符号将内部类与其外部类分开:
AdWordsService$V201109/CAMPAIGN_SERVICE
** JVM实际上并没有内部类的概念,所以java通过创建一个独立的类AdWordsService$V201109
答案 1 :(得分:1)
1.关于访问常量。您导入AdWordsService
了吗?如果不是,您可以使用完全限定名称访问AdWordsService
:some.package.name.AdWordsService/V201109/CAMPAIGN_SERVICE
,也可以通过import宏进行导入。
2.查看示例:http://clojuredocs.org/clojure_core/clojure.core/reify
(defn campaign-service [ ]
(reify
com.google.adwords.api.v201109.cm.CampaignServiceInterface
(get [_ selector] (some-function selector))
(mutate [_ operations] (some-function-2 operations))))