我对java中的import语句有疑问。
package com.punith.test;
import **com.punith.test.ClassA**;
public class ClassA {
}
因此,在上面的代码中,我可以导入我定义ClassA的同一个类。那么为什么设计师允许这样做,而不是将编译错误纠正为警告。
此致 Punith
答案 0 :(得分:1)
这只是一个未使用导入的特例,它完全没有抛出编译错误。未使用的导入没有性能损失,因为这是您打算在运行时使用类的编译时指示器。
有无数种方法可以创建无意义的代码;让每一个抛出编译时错误都会使编译器变得更加复杂。最好依赖于开发人员常识的元素,当常识失败时(经常),优化狡猾的代码 - 在这种情况下会发生。
答案 1 :(得分:0)
自我导入类不会产生编译错误,但没有必要将其作为导入自己。
答案 2 :(得分:0)
对你的问题有一些想法。
首先,让我们考虑一下为什么编译器会弃用某些代码结构?在这种情况下?显然,任何编译器错误都是关于代码难以理解的部分的信号,这些信号无法正确转换为低级指令,因此JVM无法解释它。所有其他情况,无意义或荒谬,但可以实施 - 都不会被弃用。例如,您还可以在Java中执行许多无意义的事情:
public void nop() {
int i;
}
或
for (int x = 0; x < 0; x++);
或
int i = 1;
i = i;
其次,关于import
陈述的想法并不完全是关于你的问题,但它接近它。还有import static
声明。这是一个非常大的情况,静态导入同一个类,这个文件中描述的是明智的事情。例如,在这种情况下它很有用:
package xxx;
import static xxx.TestEnum.Test.*;
public class TestEnum {
enum Test {
TEST1,
TEST2
}
public boolean isTest2(Test test) {
return test == TEST2;
}
}
在没有import static xxx.TestEnum.Test.*
的代码中,我们无法使用test == TEST2;
这样的结构。如果没有此类导入,则会compile error
,我们必须将其更改为return test == Test.TEST2;
。