看板 java 關於我們 聯絡資訊
我用CLASSLOADER將指定路徑的*.class檔(*表表檔名) 可是遭遇到一個問題 URL url1 = new URL("file:/D:/workspace/"); //CLASS檔所在路徑 URLClassLoader urlClassLoader1 = new URLClassLoader(new URL[] {url1}); Class cls =urlClassLoader1.loadClass("ttt"); //CLASS名稱 Object bbb= cls.newInstance(); //將載入的CLASS newInstance() 以上這一段主要在載入class檔,而我的ttt.class內容是 public class ttt { public static void main(String[] args) { } public void sort(int seq[]) { System.out.println(seq[0]); } ttt() { System.out.println("ttt無參數"); } } 裡面只有一個建構子和一個方法,可是建構子ttt()卻會讓我 Object bbb= cls.newInstance() 這一句無法過newInstance ,但是當我把建構子砍掉以後,就又可以過了,我以為是我忘記加null 所以就把cls.newInstance(null),沒想出現不適用引數null的訊息 我查了一下,通常是把建構子和方法分開放在不同class裡面 就是有建構子就沒有方法,有方法就沒有建構子 再分別用getconstructor抓建構子和invoke抓方法 是我這樣放在一起是錯的嗎?本來可以過的 放在一起卻不能用cls.newInstance()了,這樣除了分開放沒有別的辦法了嗎? 一直出現錯誤訊息 java.lang.IllegalAccessException: Class constructor1 can not access a member of class ttt with modifiers "" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 編輯: eicsarch 來自: 118.170.2.4 (08/20 01:01)
kanandg1:會不會是因為建構子是default?試試public? 08/20 01:58
eicsarch:感謝!!!加上public以後果然成功了!! 08/20 07:22
eicsarch:不過為什麼不加public不能用??原理是什麼? 08/20 07:34
PsMonkey:就是基本的權限阿.... 08/20 09:09
Schelfaniel:Java 規定就是這樣,不想寫 public 就用 Scala 吧 08/20 11:36
PsMonkey:樓上拉票拉很大.... [誤] 08/20 11:46
Schelfaniel:我是覺得語言本身就應該提供一些能省略的機制的, 像是 08/20 11:57
Schelfaniel:美國真多加拿大人 其實是 (在)美國(有)真多加拿大人 08/20 11:59
PsMonkey:嗯.. 持反對意見 XD 08/20 13:23
sbrhsieh:就這個問題而言,五樓提出的建議是本末倒置。 08/20 16:06
puzi:樓上認真了....XD 08/20 21:33
Schelfaniel:本末倒置嘛?如果我和你功力一樣,少打個public就比較快 08/21 09:26
qrtt1:寫程式又不是打字比賽,快慢意義不大。 08/21 09:29
Schelfaniel:好吧,反過來說好了 Java 的 default 出現率很低... 08/21 09:40
Schelfaniel:如果把 default 和 public 反過來 (default 要多打字) 08/21 09:42
Schelfaniel:這樣整體程式一口氣可以少掉一堆 public 看起來很簡潔 08/21 09:43
Schelfaniel:至少我覺得讓程式簡潔一點也沒什咩不對,當然你可以說 08/21 09:44
Schelfaniel:"Java這樣比較習慣"或是"讓新手知道要用public"之類的 08/21 09:46
Schelfaniel:如果要用Java,Java的規定就是要遵守,少打就是不行的 08/21 09:49
PsMonkey:請不要推文成章.... 08/21 11:20