Java 这些语句是什么意思?建议使用这种样式吗?
最近,我偶然发现了一种说法:Java 这些语句是什么意思?建议使用这种样式吗?,java,static-import,Java,Static Import,最近,我偶然发现了一种说法: import static java.lang.System.out; import static java.lang.System.exit; 我在一些教程中读到了这些陈述。这些声明行吗 如果这些语句是正确的,那么它们是什么意思?在编写代码时应该经常使用它们吗 它们称为静态导入。其效果是允许您在程序中使用名称out和exit,就好像它们是在当前范围中定义的一样;因此,您可以编写exit(0)而不是System.exit(0) 现在,这是个好主意吗?有时,如果使用
import static java.lang.System.out;
import static java.lang.System.exit;
我在一些教程中读到了这些陈述。这些声明行吗
如果这些语句是正确的,那么它们是什么意思?在编写代码时应该经常使用它们吗 它们称为静态导入。其效果是允许您在程序中使用名称out
和exit
,就好像它们是在当前范围中定义的一样;因此,您可以编写exit(0)
而不是System.exit(0)
现在,这是个好主意吗?有时,如果使用得当,它们是减少混乱的好方法。但大多数时候,它们实际上只是使代码更难理解。读者会问“这个out
定义在哪里?”和“exit()从哪里来?”通常,您应该避免使用它们
但是,如果您编写的类都是关于处理
SomeReallyLongName
对象的,并且SomeReallyLongName
定义了一组FINAL_常量
,那么使用静态导入将节省大量键入和大量混乱,并且这些常量的来源将非常清楚。是的,完全可以
这称为静态导入
。这允许在类中定义为静态
的成员,以及
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(.,.)
我认为使用静态导入可能不是一个好主意,因为它会使代码难以阅读。它们是静态导入。它允许您执行类似于
exit(0)
的操作,而不是System.exit(0)
我不建议对众所周知的Java类使用这种方法,因为它可能会让一些人感到困惑。但有时,它对于像这样的实用程序类很有用
非常详细,但您可以通过静态导入使其更易于阅读:filter(list,SomeClass.class)
您应该与您的团队核实,看看他们的代码指南是什么,并尽量保持一致
静态导入构造允许对静态成员进行非限定访问,而无需继承包含静态成员的类型。相反,程序会单独导入成员
如果您希望方便地访问
out
和exit
以便直接调用它们,例如out.println()。虽然有些人可能会认为它“令人困惑”,很难弄清楚out
从何而来,但任何现代IDE都可以帮助他们弄清楚这一点。是的,这些语句被称为静态导入
,完全有效。有关更多信息,请参阅
关于用法,《指南》规定:
那么什么时候应该使用静态导入呢?非常节俭!只有在需要时才使用它
否则,您可能会试图声明常量的本地副本,或者
滥用继承(常量接口反模式)。换句话说
换句话说,当您需要频繁访问来自的静态成员时,请使用它
一两节课。如果过度使用静态导入功能,它可能会
使您的程序无法读取和维护,从而污染其性能
包含您导入的所有静态成员的命名空间。代码的读者
(包括你,在你写了几个月后)不会知道
类a静态成员来自。导入所有静态成员
从一个类中删除对可读性特别有害;如果你需要
仅一个或两个成员,分别导入它们。使用得当,,
静态导入可以通过删除
重复类名的样板
这些是静态导入概念。它们类似于简单的导入,但具有不同类型的概念。请参见此处,您导入一个函数exit()和一个字段out,并且在其相应的类中都是静态的(如果此处的Systen都是其类)。在此之后,您可以不编写System.out.println()你可以简单地写出out.println()。同样地,你可以写出exit(),而不是System.exit(),你说这很好,但你说这可能不是个好主意。:)我觉得这听起来很混乱。@Amir Raminfar在一个问题上被问到,这些陈述是否正确,所以我说是的,完全正确。使用这些进口产品可能不是一个好主意,但它们是完全有效的。
Iterables.filter(list, SomeClass.class)