作者eicsarch (Eics)
看板java
標題Re: [問題] 從文字檔讀取演算法
時間Thu Aug 20 00:38:59 2009
我用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