2010-12-15 6 views
1

나는 행운이없는 전역 변수 및 전역 배열 정보에 액세스하는 방법에 관한 간단한 질문이 있습니다.Java - 전역 변수 및 배열 문제

두 개의 Java 파일이 있지만 내 응용 프로그램의 문자열 및 배열 정보에 액세스 할 수 없습니다. Optrader.java.

  1. Optrader.java
  2. OptraderGlobals

내 OptraderGlobal.java 파일 :

class OptraderGlobal 
{ 
    String[] columnNames 
      = {"Ex-Date", 
       "Dividend", 
       "Actual", 
       "Yield (%)" 
      }; 

    Object[][] data = { 
     {"dd/mm/yyyy", new Double(5), new Boolean(false), 
      {"21/12/2013", new Double(5), new Boolean(false)}; 
     } 
} 

내 Optrader.java 파일 :

/* Volatility Table Model is CLASS within Optrader.java */ 
//Create Volatility Table 
class VolatilityTableModel extends AbstractTableModel 
{ 
    public int getColumnCount() 
    { 
     return OptraderGlobal.columnNames1.length; 
    } 
} 

오류 :

non-static variable columnNames cannot be 
referenced from a static context 
return OptraderGlobal.columnNames.length; 

또한 Optrader.java의 다른 클래스 내 전역 배열 데이터에 액세스해야합니다. 이 필드는 글로벌 싶은 경우

답변

0

, 당신은 정적을 선언해야합니다

static String[] columnNames = ... 

static Object[][] data = ... 

static 키워드없이, 필드 인스턴스 클래스 자체에 OptraderGlobal하지에 속한다.

+0

심볼 심볼을 찾을 수 없습니다. 메소드 setText (java.lang.String) 위치 : 클래스 java.lang.오브젝트 \t \t \t \t \t 휘발성 테이블 메모리. 데이터 [0] [0] .setText (TextLine); – Stephen

+0

'Object'는'setText' 멤버가 없습니다. 결과를 적절한 유형으로 변환해야합니다. – cdhowie

0

클래스에 전역 적으로 표시하려면 static으로 선언해야합니다. 즉, 필드는 각 인스턴스에 대해 새 버전이 작성되는 것이 아니라 클래스 자체 (단 하나의 사본)와 연관됩니다. 당신이 현재이 작업을 수행하지 않았기 때문에

, 당신은 당신의 VolatilityTableModel에서 복사 오류와 함께 종료 - 당신이 OptraderGlobal의 일부 특정 예를하지 않고 필드를 참조 할 수 없습니다.

Object oriented programming과 관련된 일부 리소스를 살펴 보시기 바랍니다.이 실수와 전체 디자인 (일반적으로 전역은 좋지 않음)은 이러한 원칙에 익숙하지 않은 것으로 나타났습니다. Java는 객체 지향 언어이므로이 스타일에 익숙해지면 끝나지 않을 것입니다.

+0

많은 조언을 주셔서 감사합니다. 변수에 액세스하려는 클래스에서 Volatatility 테이블 모델의 인스턴스를 만드는 것이 좋습니다. – Stephen

0

원하는 방식으로 액세스하려면 public static으로 선언해야합니다.

public static String[] columnNames 
      = {"Ex-Date", 
       "Dividend", 
       "Actual", 
       "Yield (%)" 
      }; 

public static Object[][] data = { 
     {"dd/mm/yyyy", new Double(5), new Boolean(false), 
       {"21/12/2013", new Double(5), new Boolean(false)}; 
        } 

클래스를 public으로 선언해야합니다.

+0

기술적으로 모든 액세스 클래스가 동일한 패키지 내에있는 한 '공개'일 필요는 없습니다. (모든 것이 기본 패키지에있는 것처럼 보입니다.) 이 패키지들은 공개되어 있어야하고 기본이 아닌 패키지 *가 사용되어야 함에도 동의하지만 전역/정적 변수가 있어서는 안됩니다 * 그래서 다양한 수준의 문제가 있다고 생각합니다. :-) –

+0

@Andr, 정확합니다. 공개 할 필요는 없지만 진정으로 글로벌하게하려면 공개해야합니다. – jjnguy

+0

안녕, 도와 줘서 고마워하지만 여전히 ... 기호 기호를 찾을 수 없습니다 : 메서드 setText (java.lang.String) 위치 : 클래스 java.lang.Object DividendsTableModel.data [0] [0] .setText (TextLine); 지금 무엇을해야할지 모르겠다 Stephen – Stephen

0

member fields in Java에 대해 자세히 알아야합니다. 귀하의 경우에는

OptTraderGlobal의 인스턴스를 만들지 않고 다른 클래스에서 그들을 그냥 접근하려는 경우, 당신은 columnNamesdatastatic을해야한다.

+0

히야는 여전히 문제가 있다고 말하고 있습니다. – Stephen