为什么在使用代理时,Clojure会出现java.lang.IllegalAccessError错误?

3
我将使用Twitter4j来访问用户流。我遇到的问题是,我无法实现接口并将其用作监听器。
以下是我的完整代码:
(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

为什么会这样?这些接口并不是私有的,它们只是简单的接口。发生了什么事情?
1个回答

3
假设这是实现twitter4j.StreamListener未声明显式访问修饰符,因此仅在其自己的包中可见-请参阅Gosling、Joy、Steele、Bracha、Buckley,The Java ® Language Specification. Java SE 8 Edition,§6.6.1 确定可访问性:

如果类或接口类型被声明为public,则可以通过任何代码访问它,前提是它所在的编译单元(§7.3)是可观察的。

如果类或接口类型使用包访问权限声明,则只能从声明它的包内部访问。

未声明访问修饰符的类或接口类型隐式具有包访问权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接