一個有關package的錯誤: 沒有包名的類
Akka/play(activator)2.5.3 建立工程
2016-5-20
一個有關package的錯誤
寫了一個類 AkkaSystem,用於處理一些actor相關的一些靜態方法。
為了方便,把這個類直接放在了 app 目錄下,
這樣編譯好了以後,play會把相應的class檔案放在target/scala-2.11/classes 目錄下。
這個類就沒有package包名字。
這個類本身沒有問題。問題出在引用上。
在 app/controllers/MyController.java 中有一行這樣的程式碼:
future= Patterns.ask(AkkaSystem.getMyActorPoolActorRef(),messages, 1000);
編譯時候,出現類似的錯誤:
[error]/tmp/demo/mytest/app/controllers/MyController.java:33: cannot findsymbol
[error] symbol: variable AkkaSystem
[error] location: class controllers.MyController
[error] Future<Object> future =Patterns.ask(AkkaSystem.getMyActorPoolActorRef(), messages, 1000);
[error](compile:compileIncremental) javac returned nonzero exit code
一直搞不清楚錯在哪裡,直到把類 AkkaSystem 挪到了一個目錄下。
查詢了一下,瞭解到java 關於 類管理的一個細節。
沒有包名字限制的類,只能被沒有包名限制 且 在同一個目錄下的類 引用。
也就是說,
沒有包名字限制的類,不能被有包名字的類引用。
這麼看,app目錄下的由play自建的 兩個類 Module Filters ,是兩個孤立的類,就沒打算讓我們使用。