仍然在同一個項目(基於Java的shell)上工作,並試圖運行它 - 並得到了一個奇怪的錯誤。我正在使用代表其中一個命令的單個類,並且由於學校計算機沒有編譯器,因此我使用ideone。無論如何,我收到了一個錯誤,雖然我之前看到過,但這個位置真的很奇怪。錯誤:奇怪的Java錯誤放置
Main.java:56: error: no enclosing instance of type LIST_Command is in scope
public FAKE_CMD(int i) {this.msg = i;System.out.println(i);}
^
不應該在一個地方是調用構造函數,或類的靜態方法嗎?
這裏是代碼(完整的,讓我知道我應該修剪或編輯它自己)是的,這使得它成爲一個SSCCE。
package javashell.ver2.command;
import java.io.*;
import java.util.*;
class LIST_Command { /*extends Command*/
public static Map<String, Command> commands = new HashMap<>();
public String description() {
return "List all commands, their descriptions, or usages.";
}
public String usage() {
return "list <cmds | desc | usage>";
}
public boolean runCmd(String[] cmdArgs, PrintStream output) {
try {
if (cmdArgs.length == 0) {
return false;
}
else if (cmdArgs.length > 0) {
if (cmdArgs[0].equals("cmds")) {
for (Map.Entry<String, Command> cmd : /*main.Main.*/commands.entrySet()) {
output.println(cmd.getKey());
}
}
else if (cmdArgs[0].equals("desc")) {
for (Map.Entry<String, Command> cmd : /*main.Main.*/commands.entrySet()) {
output.println(cmd.getValue().description());
}
}
}
return true;
}
catch (Exception e) {
return false;
}
}
public static void main(String[] args) {
commands.put("test1", new FAKE_CMD(1));
commands.put("test2", new FAKE_CMD(2));
new LIST_Command().runCmd(new String[] {"cmds"}, System.out);
}
abstract class Command {
public abstract String usage();
public abstract String description();
public abstract boolean runCmd(String[] cmdArgs, PrintStream output);
}
static class FAKE_CMD extends Command {
int msg;
public FAKE_CMD(int i) {
this.msg = i;
System.out.println(i);
}
public String usage() {
return "usagetest" + msg;
}
public String description() {
return "descriptiontest" + msg;
}
public boolean runCmd(String[] cmdArgs, PrintStream output) {
return true;
}
}
}
我猜你在某處有'{'或'}'的位置,但代碼格式太差,無法確定。 – 2013-05-11 20:50:33
我真的很想知道學校如何讓學生在不向他們提供基本開發工具的情況下編寫代碼。 – 2013-05-11 20:50:43
@Stefano它不適合學校 - 這是我在學校免費期間工作的個人項目。而且,他們只是在電腦上安裝了Win7,並沒有重新安裝程序 – 2013-05-11 20:52:07