这些陈述意味着什么,推荐这种风格?

时间:2011-09-14 16:55:30

标签: java static-import

最近我发表声明:

import static java.lang.System.out;
import static java.lang.System.exit;

我在一些教程中阅读了这些陈述。这些陈述是O.K吗?

如果陈述是正确的,它们是什么意思,在编写代码时是否应该定期使用?

6 个答案:

答案 0 :(得分:4)

它们被称为静态导入。这样做的结果是允许您在程序中使用名称outexit,就好像它们是在当前作用域中定义的一样;所以你可以写exit(0)而不是System.exit(0)

现在,他们是个好主意吗?有时,在谨慎使用时,它们是减少混乱的好方法。但大多数时候,它们实际上只是让你的代码更难理解。读者会问“这个out定义在哪里?”和“exit()来自哪里?”一般来说,你应该避免它们。

但是如果你正在编写一个关于处理SomeReallyLongName对象的类,并且SomeReallyLongName定义了一堆FINAL_CONSTANTS,那么使用静态导入导入它们将节省大量的输入和很多混乱,很明显这些常数来自何处。

答案 1 :(得分:3)

它们是静态导入。它允许您执行exit(0)而不是System.exit(0)之类的操作。

我不建议将它用于众所周知的Java类,因为它可能会让一些人感到困惑。但有时它对像Guava这样的实用程序类很有用。

Iterables.filter(list, SomeClass.class)

非常详细,但您可以使用静态导入更轻松地阅读:filter(list, SomeClass.class)

您应该与您的团队核实,看看他们的代码指南是什么,并尝试保持一致。

答案 2 :(得分:1)

是的,它完全没问题。

这称为static import。这允许在课堂上定义的成员为static和 使用public而不指定定义字段的类。 此功能在J2SE 5.0中定义。 例如:

import static java.lang.Math.*;
import static java.lang.System.out; 
// in main
out.print( max(100,200) ); // prints 200.You didn't have to use Math.max(.,.) 

我认为使用静态导入可能不是一个好主意,因为它会使您的代码难以阅读。

答案 3 :(得分:1)

是的,这些陈述称为static imports,完全有效。有关详细信息,请查看javase guide on static imports

关于使用情况,指南指出:

  

那么什么时候应该使用静态导入?非常谨慎!只在使用时才使用它   否则你会想要声明常量的本地副本,或者   滥用继承(Constant Interface Antipattern)。其他   单词,当您需要频繁访问静态成员时使用它   一两节课。如果过度使用静态导入功能,则可以   使你的程序不可读和不可维护,污染它   包含您导入的所有静态成员的命名空间。您的代码的读者   (包括你,在你写完几个月后)将不知道哪个   class一个静态成员来自。导入所有静态成员   从一个班级可以特别有害于可读性;如果你需要   只有一两个成员,单独导入它们。适当使用,   通过删除,静态导入可以使您的程序更具可读性   重复类名的样板。

答案 4 :(得分:0)

Static imports are a new feature added in Java 1.5

  

静态导入构造允许对静态成员进行非限定访问,而不从包含静态成员的类型继承。相反,程序会单独导入成员

如果您希望轻松访问outexit,那么您的示例没有任何问题,以便您可以直接将其称为out.println()。虽然有些人可能认为它“混乱”并且很难弄清out来自哪里,但是在语法方面没有任何语法错误,但是任何现代IDE都可以帮助他们解决这个问题。

答案 5 :(得分:0)

这些是静态导入概念。这些是简单的导入,但具有不同类型的概念。请参见此处导入一个函数 exit()和一个字段 out 在相应的类中是静态的(如果这里的Systen都是他们的类)。在此之后而不是编写 System.out.println(),你可以简单地写 out.println()。而不是 System.exit(),你可以写 exit()