为什么clojure在使用代理时与java.lang.IllegalAccessError一起出错
我正在尝试使用Twitter4j访问用户流。我遇到的问题是,我无法实现一个接口,然后将其用作侦听器 这是我的全部代码为什么clojure在使用代理时与java.lang.IllegalAccessError一起出错,clojure,interface,twitter4j,Clojure,Interface,Twitter4j,我正在尝试使用Twitter4j访问用户流。我遇到的问题是,我无法实现一个接口,然后将其用作侦听器 这是我的全部代码 (ns dameon.temporal-lobe.twitter (:import [twitter4j TwitterStreamFactory StatusListener StreamListener] [twitter4j.conf ConfigurationBuilder]) (:require [clojure.e
(ns dameon.temporal-lobe.twitter
(:import [twitter4j TwitterStreamFactory StatusListener StreamListener]
[twitter4j.conf ConfigurationBuilder])
(:require [clojure.edn :as edn :only [read-string]]))
;;The class that handles the stream data
(def status-listener
(proxy [StatusListener] []
(onStatus [status]
(println status))
(onDeletionNotice [status-deletion-notice])
(onTrackLimitationNotice [number-of-limited-statuses])
(onStallWarning [warning])
(onException [ex]
(.printStackTrace ex))
(onScrubGeo [user-id up-to-status-id])))
(class status-listener)
;;Connect to the stream and add listener
(def creds (get (edn/read-string (slurp "creds.edn")) :twitter))
(-> (ConfigurationBuilder.)
(.setDebugEnabled true)
(.setOAuthConsumerKey (creds :consumer-key))
(.setOAuthConsumerSecret (creds :consumer-secret))
(.setOAuthAccessToken (creds :access-token))
(.setOAuthAccessTokenSecret (creds :access-secret))
(.build)
(TwitterStreamFactory.)
(.getInstance)
(.addListener status-listener)
(.sample))
这就是我得到的错误
Unhandled java.lang.IllegalAccessError
tried to access class twitter4j.StreamListener from class
dameon.temporal_lobe.twitter$eval11235
为什么会这样?这些接口不是私有的。它们只是简单的接口。发生了什么?假设,twitter4j.StreamListener
声明时没有明确的访问修饰符,因此它只在自己的包中可见–请参见Gosling,Joy,Steele,Bracha,Buckley,§6.6.1确定可访问性:
如果一个类或接口类型被声明为公共的,那么它可以被任何代码访问,前提是声明它的编译单元(§7.3)是可观察的
如果类或接口类型是通过包访问来声明的,那么只能从声明它的包中访问它
未声明访问修饰符的类或接口类型隐式具有包访问权限