2012-09-11 2 views
1

클래스가 포함되어 있으며 상수에 대한 "저장 단위"의 역할을하는 몇 개의 미니 안경이 있습니다. 문제는 이러한 상수에 값을 할당하는 데 필요한 정보가 있으며 해당 정보 만 생성자에서 가져옵니다. 안타깝게도 생성자에서는 miniclass가 선언되지 않았으며 NetBeans에서는 최종 변수가 초기화되지 않았더라도 선언 할 수는 있지만 최종 변수에 할당 할 수 없다고 알려줍니다. 이 문제를 어떻게 해결해야합니까?별도로 신고하여 최종 변수에 지정 - Java

편집 :이 문제가되는 일부 코드의 예 : 당신은 당신이 어딘가에 Constants 클래스의 인스턴스를 필요로하는 일을 할 수없는 일을하려고 무엇

public class Car { 
    class constants { 
     public final String MAKE; 
     public final String REGISTRATION_NUMBER; 
    } 
    public Car(String make, String regNumber) { 
     constants.MAKE = make; 
     constants.REGISTRATION_NUMBER = regNumber; 
    } 
} 
+3

우리에게 어떤 코드를 보여? – kosa

+0

죄송합니다. 코드가 곧 나타납니다. – Bluefire

+0

나는 "미니 안경"이 생성자를 원할 것이라고 생각합니다. 그런 다음 외부 클래스 생성자가 인수를 전달할 수 있습니다. –

답변

9

.

Car car = new Car("abc", "def"); 
String make = car.constants.MAKE; 

참고하십시오 아마 더 나은 (간단) 디자인

public class Car { 
    class Constants { 
     public final String MAKE; 
     public final String REGISTRATION_NUMBER; 
     private Constants(String make, String regNumber) { 
      this.MAKE = make; 
      this.REGISTRATION_NUMBER = regNumber; 
     } 
    } 

    public final Constants constants; 
    public Car(String make, String regNumber) { 
     this.constants = new Constants(make, regNumber); 
    } 
} 

그런 다음 호출 할 수 있습니다 ... 한 가지 방법은 다음과 같이 할 것이지만, 그 일정에 대한 일정은 없습니다 될 것이라고

public class Car { 
    private final String make; 
    private final String regNumber; 

    public Car(String make, String regNumber) { 
     this.make = make; 
     this.regNumber = regNumber; 
    } 

    //getters 
} 
+6

두 번째 예제는 훨씬 간단합니다. 코드를 보는 다른 사람들이 Java 사용법을 따르기 때문에 훨씬 쉽게 이해할 수 있습니다. 이러한 필드를 유지하는 내부 클래스를 만드는 것은 과도합니다. – Alex

+1

@Alex 완전히 동의합니다. – assylias

관련 문제