Tag: javac

在优化过程中Java内联方法会不会?

我想知道JVM / javac是否足够聪明 // This line… string a = foo(); string foo() { return bar(); } string bar() { return some-complicated-string computation; } 成 string a = bar(); 或者在发布案例中删除对foo()的不必要调用(因为无法访问的代码): string a = foo(bar()); // bar is the same … string foo(string b) { if (debug) do-something-with(b); } 对于第一个例子我的感觉是肯定的,对于第二个例子我的感觉是“不太确定”,但是有人可以给我一些指示/链接来确认吗?

编译所有子文件夹中的java文件?

如何使用javac编译Unix上所有子文件夹中的所有java文件?

保留已编译的java类中的参数/参数名称

当我编译这样的东西时: public class MyClass { void myMethod(String name, String options, String query, String comment) { … } } 并将其编译为类文件,似乎参数名称丢失了。 也就是说,当其他一些Java代码引用MyClass并想要调用或覆盖myMethod ,我的IDE(当前是Eclipse)似乎从类文件中获取此方法签名: void myMethod(String arg0, String arg1, String arg2, String arg3); 我知道Eclipse(以及可能还有其他IDE)允许我提供MyClass的源或javadoc (如Bishiboosh所指出的)的链接 ,并且可以利用这一点。 但我很好奇是否有某种方法告诉javac将名称包含在类文件中,以便该类的用户可以看到参数名称,即使它们只有类文件。 课程解决方案 当我用java -g:vars编译一个类时,参数的名称包含在类文件中。 -g:vars似乎等同于Eclipse – >项目属性 – > Java编译器 – >将变量属性添加到生成的类文件中。 几位作者提出了这个解决方案,但尼克的答案终于让我相信了。 在我的机器上,Eclipse有时会使用这些信息,有时它没有,这可能是我的错或Eclipse中的错误,但不是类文件或编译的问题。 无论如何,现在我知道这些信息肯定存在。 但没有接口的解决方案 虽然这对于类很好(有点),但它不适用于接口。 对我来说,逻辑上的原因似乎是,-g:vars只提供局部变量的名称,这也是javac的文档所述。 在方法体中,它的参数与局部变量非常相似,因此它们被-g:vars覆盖。 接口方法没有实体,因此它们不能有局部变量。 我最初的问题只是要求上课,因为我不知道可能有任何不同。 类文件格式 […]

为什么javac抱怨与类的类型参数无关的generics?

请按顺序阅读代码中的注释,问题详情如下。 为什么会发生这种差异? 如果可能,请引用JLS。 import java.util.*; /** * Suppose I have a generic class * @param with a type argument. */ class Generic { // Apart from using T normally, T paramMethod() { return null; } // the class’ interface also contains Generic Java Collections // which are not using T, but unrelated types. List unrelatedMethod() […]

从命令行运行包中的java

我已阅读以前发布的问题。 有些是模糊的,没有一个解决我的问题,所以我不得不再问。 我有两个简单的类, package One; import One.Inner.MyFrame; public class test { public static void main(String args[]) { MyFrame f= new MyFrame(); } } 另一类是, package One.Inner; import java.awt.*; import javax.swing.*; public class MyFrame extends JFrame { public MyFrame() { setPreferredSize(new Dimension(400,560)); setVisible(true); } } 我在Windows cmd中的基本文件夹“基本”。 我编译使用 basic> javac *.java -d . 创建文件夹和子文件夹。 cd One […]