【发布时间】:2016-08-20 00:19:48
【问题描述】:
我想知道如何在不知道公共类名的情况下编译 .java 文件。
提供一个示例用例:我正在操作一个沙盒,并且允许用户向我发送一个字符串。我将该字符串写入 .java 文件,我对其进行编译、评估生成的类并回复输出。
?????.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World");
}
}
如果我给?????.java 随机分配一个名称,例如test.java 并运行命令javac test.java,那么它会失败
错误:HelloWorld 类是公共的,应该在名为 HelloWorld.java 的文件中声明,如下所示:
HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World");
}
}
这可能吗?我应该放弃编译 Java 的能力,还是有其他解决方案?
【问题讨论】:
-
呃,让用户告诉你?在文件名中?您实际上不需要类名,只需要文件名。
-
现在我再次阅读了您的问题文本,我很困惑。如果"users [...] send [you] a .java file",那么您已经知道文件的名称,所以为什么要重命名它。而且由于该文件应该包含
public类,因此由用户来确保它包含。知道文件名意味着你也知道类名,所以你知道如何编译和运行它。 -
@Andreas 澄清一下,他们只是发送一个文本字符串,而不是一个命名文件。
-
所以指示他们将类称为特定的东西,例如
Challenge、Assignment、Exercise等。如果您将文件命名为Challenge.java并且它不会编译,或者如果它编译但没有创建正确名称的类,或者该类没有没有main()方法,那么他们在挑战/作业/练习中失败了。
标签: java