인스턴스 생성자에서 정적 변수에 값을 할당하는 것은 좋지 않은 생각입니다.이 클래스에서 두 개의 객체를 인스턴스화하면 두 번째로 배열에 저장된 모든 데이터가 손실됩니다. 두 번째 인스턴스가 정적 참조를 덮어 쓸 때 오래된 배열). null 체크를 사용하면 나쁜 생각이지만, 한 인스턴스의 데이터를 "전역 변수"방식으로 정말로 정말로 필요로하지 않는다면 말입니다. 정적 참조는 전역 변수로 생각하는 것이 가장 좋습니다. 전역 변수는 모두 공개 (공개 인 경우) 또는 사용자가 정의한 클래스 (비공개) 또는 중간에 정의 된 클래스 (보호 또는 패키지로 보호 된 액세스)에서만 볼 수 있습니다. 거의 모든 경우에 그것들을 사용하는 것을 피하고 클래스 내에서 정적 변수 대신에 싱글 톤 패턴을 사용하는 것이 좋습니다. Singleton 패턴을 사용하면 인스턴스 변수와 비 정적 getter를 사용하여 데이터에 접근 할 수 있습니다.
그러나이 특정 문제에 대해 왜 싱글 톤 패턴이 필요한지 넌 알지 못합니다. 단지 데이터를 객체에 저장하고 그 객체를 공유하려고합니다.
당신은 정적 키워드없이이 같은 게시 된 코드를 해결할 수이 여러 LargeData 인스턴스가 응용 프로그램에서 한 번에 살아있을 수 있습니다 :
public class LargeData {
private long[] myData; // instance variable to store the data
private static final int MAX = 100000; // max length
public LargeData() {
myData = new long[MAX];
}
public long[] getData() {
return myData;
}
}
그런 다음을 사용할 수 있습니다 데이터 형식 :
LargeData ld = new LargeData();
long[] = ld.getData();
그리고 ld에 저장된 참조를 원하는대로 사용할 수 있습니다. 다른 클래스 등을 통해 전달할 수 있습니다.
더 나은 아이디어는 배열을 노출시키지 않고 저장된 데이터를 사용하는 API를 만드는 것입니다. 예를 들면 : 당신이 LD에 저장된 LargeData 인스턴스에 대한 참조 주위에 통과하지 않으려면 지금
public long getLong(int n) { return myData[n]; }
public void setLong(int n, long value) { myData[n] = value; }
, 당신은 당신이 액세스 할 수있는 참조 및 정적 게터를 저장하는 LargeData에서 정적 변수를 사용할 수 있습니다 다른 Java 코드에서 가져온 것입니다. 여러 LargeData 인스턴스가 필요하면 인스턴스화 된 각 LargeData 인스턴스를 저장할 Map을 캡슐화하는 LargeDataRegistry 클래스를 만들 수 있습니다.
처음에 "새로운"것을 만들어야한다고 생각합니까? –
편집을 마치 신 것처럼 말입니다. –
고마워요, 제 생각에 모든 사람들이 저를 똑같은 방식으로 반복해서 반복해서 생각합니다. :) –