在类中导入类的语句?为什么设计师允许这样做。

时间:2013-07-19 11:15:11

标签: java import

我对java中的import语句有疑问。

    package com.punith.test;
    import **com.punith.test.ClassA**;

    public class ClassA {

    }

因此,在上面的代码中,我可以导入我定义ClassA的同一个类。那么为什么设计师允许这样做,而不是将编译错误纠正为警告。

此致 Punith

3 个答案:

答案 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;