何时在java中使用静态导入

时间:2013-12-27 20:46:41

标签: java

何时适合执行静态导入package.package.class?似乎没有什么能在Google上回答这个问题。

  

静态导入允许你写这个:

     

out.print("The result is ");   而不是这个:

     

System.out.print("The result is ");

这对我没有意义。如果我导入该类,为什么它的方法也不会被导入?

4 个答案:

答案 0 :(得分:5)

使用静态导入可以转为:

double r = Math.cos(Math.PI * theta);

进入这个:

double r = cos(PI * theta);

静态导入告诉类这些方法的来源,因此在使用静态导入时,不需要在方法之前加上类名

答案 1 :(得分:1)

试试import static java.lang.System.out;。您没有导入其'方法,而是导入其'静态out成员变量。

答案 2 :(得分:0)

static import是一种便利。如果您在代码中反复使用某些类的static成员,静态导入将使您免于编写代码。

System.out.println成为out.println可能是最常见的用途之一,因为它通常与控制台调试和控制台应用程序相关联。但是,任何具有静态成员(方法或字段)的类都可以有效地使用。例如,如果大量使用Math,静态导入该类将使您对数学函数的调用更简单。如果您经常调用单例类的方法,那么静态导入该类将允许您从Singleton.INSTANCE.method()转到INSTANCE.method()

由于静态导入纯粹是为了方便起见,因此询问不适合何时使用而不是 使用它时更有意义。在以下情况下不应使用静态导入:

  • 您将在多个静态导入之间创建名称冲突(我相信javac无论如何都会对你大吼大叫)但
  • 目前还不清楚你所使用的静态成员来自哪个类; out.println对Java开发人员来说非常熟悉,他们会立即假设它来自System ...所以不要静态导入一些名为“out”的其他字段方法“println”! cossintanpow和朋友可以很明显地推断出来自Math,尤其是在上下文中。

一般情况下,我不会建议每个文件从多个类中静态导入,只是为了减少阅读代码时的混淆。 “foo(Bar b)是来自Fizz还是Buzz?或等待,是否从其他地方导入?{”这不是你希望未来的开发人员问自己的问题;并且记住,不会花很长时间忘记你为自己的代码做出的所有设计决定,所以对自己和其他人都要好!

答案 3 :(得分:0)

您可以在任何地方使用它,但它可能会降低代码的可读性。但是也有例外,例如,在JUnit测试中使用静态导入是普遍接受的做法

import static org.junit.Assert;

...

assertEquals(expected, actual);