2011-12-14 2 views
1

지금 두 개의 .java 파일이 있습니다.
Main.java :생성자가 정적 변수에 액세스하도록하십시오

public class Main { 
    static int integer = 15; 
    NeedInteger need = new NeedInteger(); 
} 

과 NeedInteger.java

public class NeedInteger { 
    System.out.println(integer); 
} 

이 매우 단순화 물론이지만, 나는이 작업을 수행 할 수있는 방법이있다?

+1

변수를 클래스 생성자에 전달하십시오. 당신은 당신의 진정한 필요에 대해 더 구체적으로 알아볼 필요가 있습니다. –

+0

두 번째 클래스의 인스턴스가 2000 개 정도 있다고 가정 해 봅시다.이 인스턴스는 모두 Main 클래스에서 만들어진 3 차원 문자열 배열에 액세스해야합니다. – BarrensZeppelin

+0

당신이'String [] [] [] array = Main.threeDimensionalStringArray;가 아닌 다른 것을 의미한다고 가정합니다. 다른 클래스 나 다른 것에서 정적 변수를 참조하는 방법을 묻고 있습니까? – Gray

답변

2

많은 사람들이 대답 했으므로 정확한 값은 새 클래스의 생성자에 값을 전달하는 것입니다.

어떤 이유로 든 할 수 없다면, Main에서 공개 정적 접근 메소드를 사용하여 값에 액세스 할 수 있습니다 (이 방법은 필드를 public으로 설정하는 것보다 약간 낫습니다).

예.

public class Main 
{ 
    private static int integer = 15; 

    public static int getInteger() 
    { 
    return integer; 
    } 
} 

public class NeedInteger 
{ 
    public NeedInteger() 
    { 
    int integer = Main.getInteger(); 
    } 
} 
1

변수를 클래스 생성자에 전달하십시오.

배열 참조는 단지 참조 일뿐입니다.

또는 클래스 자체를 전달하거나 static (meh)을 사용할 수 있습니다.

1

(당신이 또한 그것을 할 필요가있는 경우 선택적 멤버) NeedInteger에 생성자를 추가

public class Main { 
    static int integer = 15; 
    NeedInteger need = new NeedInteger(integer); 
} 
+0

이것은 좋은 생각 인 것 같지만 클래스의 모든 단일 인스턴스에 내 거대한 배열을 저장하지 않겠습니까? – BarrensZeppelin

+0

배열은 참조이므로 실제 내용이 아닌 참조 만 복사합니다. 그래서 문제가되지 않습니다. – Tudor

+0

@ user1098680 아니요, 배열 참조를 전달하면 배열 복사본이 아니라 배열 참조가됩니다. –

1

당신은 것이다 : 인스턴스를 만들 때 그런 다음 값을 전달

public class NeedInteger { 

    private int integer; 

    public NeedInteger(int integer) { 
     this.integer = integer; 
     System.out.println(integer); 
    } 
} 

을 (전역 변수를 사용하는 것과 같은) 나쁜 주주 이동을하거나 생성자에게 전달하십시오.

주 :

public class NeedInteger { 
    System.out.println(integer); 
} 

그것에있는 방법이 없습니다. 나는이 모든 것을 다음과 같이 재 작성하는 것이 좋습니다 :

public Class NeedInteger { 
    NeedInteger(int integer) { 
    System.out.println(integer); 
    } 
} 

작업을 실제로 완료하고 싶다면.

편집 : 위의 의견에서. 대신

클래스 이렇게 구조화 가지고

실제 어레이가 전달되지 않기 때문에, 실제 추가 오버 헤드가없는
public Class NeedStringArray { 
     NeedStringArray(String[][][] stringArr) { 
      //work with String array here 
     } 
} 

있지만 만 참조. 배열이 생성자에서 편집되는 것을 피하기 위해 배열을 final 또는 무언가로 설정하려고 할 것입니다.

1

정수는 개인이므로 NeedInteger에서 액세스 할 수 없습니다. 공용으로 설정하거나 setter 또는 getter를 사용해야하며 정적 인 Main.integer를 사용해야합니다.

일반적으로 생성자에서 설정합니다.

+0

public static integer를 수행하면 새 인스턴스가 Main.integer에 액세스 할 수 있습니까? – BarrensZeppelin

+0

예. static은 인스턴스가 하나뿐임을 의미하므로 Main.integer를 수행합니다. 변수가 아니라면 Main i = new Main(); 그리고 나는. – tehdoommarine

+0

완벽한이 솔루션이 가장 쉬운 것 같습니다. – BarrensZeppelin

1

귀하의 의견을 singleton 배열을 호스팅 할 수 또는 두 번째 클래스의 생성자에서 배열에 대한 참조를 받아들이도록 제안 다른 제안했다. 그런 다음 종속성 삽입 프레임 워크 (예 : Guice)를 사용하여 연결을 설정하십시오.

관련 문제