2013-07-19 37 views
0

我对java中的import语句有以下怀疑。在ClassA中导入ClassA的声明?为什么设计师允许这样做?

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

    public class ClassA { 

    } 

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

问候 Punith

+1

你为什么认为它应该是一个**编译器错误** ?? – PermGenError

+0

我为什么要导入相同的类?抛出一个错误,使代码更有效率,而不是垃圾内......我的猜测是“有什么原因”? –

+1

“垃圾”并不意味着它是错误的。这是多余的,因此编译器警告更合适。没有编译器错误,我认为 – PermGenError

回答

1

这只是一个未使用的导入的特例,它完全正确地不会抛出编译错误。未使用的导入没有性能影响,因为这是一个编译时指示符,您打算在运行时使用类。

有无数的方法来创建无意义的代码;让每一个抛出一个编译时错误会使编译器变得相当复杂。最好依靠开发人员的常识元素,当常识失败时(通常都是这样),优化代码 - 在这种情况下会发生这种情况。

+0

我同意你的“无谓的代码”这个词组,因为我被允许无限次地导入相同的语句,编译器仍然对我微笑:) –

0

导入类它自身不给编译错误,但没有点把,作为进口它的自我。

+1

请提到这是在评论。这不是一个答案或解释。 –

0

对你的问题有一些想法。

首先,让我们考虑一下,为什么编译器不赞成使用某些代码结构?在这种情况下?显然,任何编译器错误都是关于代码难以理解的部分的信号,无法正确转换为低级指令,因此JVM无法解释它。所有其他无意义或荒谬的情况,但可以实施的情况都不会被弃用。例如,你还可以做很多无意义的事情在Java中:

public void nop() { 
    int i; 
} 

for (int x = 0; x < 0; x++); 

int i = 1; 
i = i; 

其次想过import说法是不完全了解你的问题,但它靠近它。还有import static声明。这是在这个文件中描述的同一类的静态导入是非常明智的事情。例如,它是在这样的情况下有所帮助:

​​

在这段代码中没有import static xxx.TestEnum.Test.*我们不能用这样的建设为test == TEST2;。没有这样的进口,它将是compile error,我们必须将其更改为return test == Test.TEST2;

+0

如果我们不被允许去做那些毫无意义的事情,那么这将会是一种更好的语言设计......无论如何,当我复制同样的导入语句10次时,至少我会期待警告。:)。和编译器没有什么可抱怨的 –

+1

@PunithRaj这是因为编译器非常聪明:他会消除这个导入产生的二进制代码。 – Andremoniy

相关问题