2012-03-02 3 views
0

나는 초보자 질문이 있습니다. 두 클래스 이상에서 공유하는 전역 변수가있는 경우 클래스를 읽고 업데이트 할 수 있도록 별도의 파일에 어떻게 둘 수 있습니까? 인터페이스를 사용하지 않고 이것이 가능합니까?전역 변수에 대한 자바 별도 파일

+0

가능한 중복 (http://stackoverflow.com/questions/4646577/global-variables-in-java) –

답변

5

예, interface 변수는 모두 내재적으로 static이므로 이러한 변수 각각은 jvm에 인스턴스가 하나만 있습니다.

그러나 내 생각에 더 나은 방법은 아마 singleton 클래스에서 선언하고 사용하는 것입니다.

1

이 작업을 수행하는 가장 좋은 방법은 인터페이스 메소드를 통해 공유 응용 프로그램 상태에 액세스 할 수있게 한 다음 변수를 보유하고있는 구현 클래스를 만들고이 클래스 인스턴스를 다른 클래스에 전달하는 것입니다. 인터페이스의 인스턴스).

테스트를 위해 공유 상태 기능을 조롱하고 일반 코드 재사용 가능성을 향상 시키며 영향을주지 않고 공유 상태의 구현 및 구성을 변경할 수 있으므로 정적 클래스 또는 싱글 톤을 사용하는 것보다 낫습니다. 그것을 사용하는 코드.

예. [자바 글로벌 변수]의

// Session interface for all application shared state. 
public interface ApplicationSession 
{ 
    public int getMaxUserLimit(); 
} 

// A backing for the interface (simple in memory version, maybe future versions use a database, who knows). 
public class SomeApplicationSession implements ApplicationSession 
{ 
    private volatile int maxUserLimit = 0; 
    public void setMaxUserLimit(int limit) { this.maxUserLimit = limit; } 
    public int getMaxUserLimit() { return maxUserLimit; } 
} 


// ClassA uses the supplied session. 
public class MyClassA 
{ 
    private ApplicationSession session; 
    public myClassA(ApplicationSession session) 
    { 
    this.session = session; 
    } 
} 

// usage... 
public class MyMain 
{ 
    public static void main(String[] args) 
    { 
    // Create/get session (ultimately possibly from a factory). 
    ApplicationSession session = new SomeApplicationSession(); 

    ClassA myClassA = new ClassA(session); 
    // do stuff.. 
    } 
} 
+0

당신은 나에게이 부분을 설명해주십시오 수 있습니다 ApplicationSession 세션 = 새로운 SomeApplicationSession(); – user1064089

+0

@ user1064089 이것은 응용 프로그램 세션의 인스턴스를 인스턴스화하는 예제 일뿐입니다 (그리고이 인스턴스는 생성시 다른 클래스간에 공유됩니다). 이것을 쓸 때 유용하게 사용하려면 인터페이스에서 설정 메소드를 선언하거나 세션의 변수를 변경할 방법이 없습니다. –

관련 문제