[java] “가져 오기”후 “정적”수정자는 무엇을 의미합니까?

이렇게 사용하면 :

import static com.showboy.Myclass;

public class Anotherclass{}

차이 무엇 import static com.showboy.Myclassimport com.showboy.Myclass?



답변

설명서를 참조하십시오

정적 가져 오기 선언은 일반 가져 오기 선언과 유사합니다. 일반 가져 오기 선언이 패키지에서 클래스를 가져 와서 패키지 자격없이 사용할 수있는 경우 정적 가져 오기 선언은 클래스에서 정적 멤버를 가져와 클래스 자격없이 사용할 수 있습니다.

정적 가져 오기를 언제 사용해야합니까? 매우 드물게! 상수의 로컬 사본을 선언하거나 상속을 남용하려는 유혹이있는 경우에만 사용하십시오 (Constant Interface Antipattern). 즉, 하나 또는 두 개의 클래스에서 정적 멤버에 자주 액세스해야 할 때 사용하십시오. 정적 가져 오기 기능을 과도하게 사용하면 프로그램을 읽을 수없고 유지 관리 할 수 ​​없어서 가져 오는 모든 정적 멤버로 네임 스페이스를 오염시킬 수 있습니다. 코드를 작성한 후 몇 개월이 지난 후에도 코드 멤버는 정적 멤버의 클래스를 알 수 없습니다. 클래스에서 모든 정적 멤버를 가져 오는 것은 특히 가독성에 해로울 수 있습니다. 하나 또는 두 개의 멤버 만 필요한 경우 개별적으로 가져 오십시오. 적절하게 사용하면 정적 가져 오기로 프로그램을 더 읽기 쉽게 만들 수 있습니다.


답변

귀하가 언급 한 두 수입 간에는 차이가 없습니다. 그러나 정적 가져 오기를 사용하여 다른 클래스의 정적 멤버에 대한 규정되지 않은 액세스를 허용 할 수 있습니다. 내가 이것을해야했던 곳 :

import org.apache.commons.lang.StringUtils;
      .
      .
      .
if (StringUtils.isBlank(aString)) {
      .
      .
      .

나는 이것을 할 수있다 :

import static org.apache.commons.lang.StringUtils.isBlank;
      .
      .
      .
if (isBlank(aString)) {
      .
      .
      .

자세한 내용은 설명서를 참조하십시오 .


답변

정적 가져 오기는 다음 대신 클래스의 정적 필드 / 메소드를 가져 오는 데 사용됩니다.

package test;

import org.example.Foo;

class A {

 B b = Foo.B_INSTANCE;

}

당신은 쓸 수 있습니다 :

package test;

import static org.example.Foo.B_INSTANCE;

class A {

 B b = B_INSTANCE;

}

코드의 다른 클래스에서 상수를 자주 사용하고 정적 가져 오기가 모호하지 않은 경우에 유용합니다.

Btw, 예에서 “import static org.example.Myclass;” 작동하지 않음 : import는 클래스 용이고 import static은 클래스의 정적 멤버 용입니다.


답변

정적 가져 오기의 기본 아이디어는 정적 클래스, 정적 변수 또는 열거 형을 사용할 때마다 해당 클래스를 가져 와서 입력하지 않아도된다는 것입니다.

나는 예를 들어 내 요점을 설명 할 것이다.

import java.lang.Math;

class WithoutStaticImports {

 public static void main(String [] args) {
  System.out.println("round " + Math.round(1032.897));
  System.out.println("min " + Math.min(60,102));
 }
}

정적 가져 오기와 동일한 코드 :

import static java.lang.System.out;
import static java.lang.Math.*;

class WithStaticImports {
  public static void main(String [] args) {
    out.println("round " + round(1032.897));
    out.println("min " + min(60,102));
  }
}

참고 : 정적 가져 오기를 사용하면 코드를 혼란스럽게 만들 수 있습니다.


답변

“import static com.showboy.Myclass”와 “import com.showboy.Myclass”의 차이점은 무엇입니까?

정적 가져 오기는 필드 또는 멤버 유형 가져 오기에만 작동하므로 첫 번째는 컴파일러 오류를 생성해야합니다. (MyClass가 showboy의 내부 클래스 또는 멤버가 아니라고 가정)

나는 당신이 의미하는 것 같아

import static com.showboy.MyClass.*;

위에서 설명한 것처럼 MyClass의 모든 정적 필드와 멤버를 실제 컴파일 단위에서 사용할 수있게합니다 …


답변

import패키지 자격이없는 패키지의 액세스 클래스 자바 프로그래머를 할 수 있습니다.

static import기능을 사용하면 클래스 자격없이 클래스의 정적 멤버에 액세스 할 수 있습니다.

import클래스에 대한 접근성을 제공하고, 인터페이스 반면,이 static import클래스의 정적 멤버에 대한 접근성을 제공합니다.

예 :

수입

import java.lang.System.*;
class StaticImportExample{
    public static void main(String args[]){

       System.out.println("Hello");
       System.out.println("Java");

  }
} 

고정 수입

import static java.lang.System.*;
class StaticImportExample{
  public static void main(String args[]){

   out.println("Hello");//Now no need of System.out  
   out.println("Java");

 }
} 

참조 : 자바 5의 정적 가져 오기 무엇입니까


답변

당신이라는 클래스 내에서 정적 필드와 방법을 말해 MyClass라는 패키지 안에 myPackage당신이 입력하여 직접 액세스 할 myStaticField또는 myStaticMethod각 시간을 입력하지 않고 MyClass.myStaticField또는MyClass.myStaticMethod .

참고 :
import myPackage.MyClass 또는 myPackage.*
다른 리소스에 액세스하려면 또는