내가 같은 생성 된 상수의 큰 마운트를 들고 클래스가 자바에서 정적 initialiser의 크기 제한을 회피하기 매우 높으면 Java 메소드 크기의 상한보다 큰 정적 초기화 기 (예 :> 64kb)가 발생하여 컴파일러 오류가 발생합니다. 하나 개의 솔루션들이하는 방법에 적합하도록 바이트 코드의 64킬로바이트보다 적은 생산을 보장 할 수 블록에 대한 몇 가지 "블록 초기화 방법"을 만드는 것입니다 :어떻게
public class Constants extends SomeBaseClass {
public static XXX KEY1;
public static XXX KEY2;
public static XXX KEY3;
// ...
public static XXX KEY2000;
static {
initialise0001To1000();
initialise1001To2000();
}
private static void initialise0001To1000() {
KEY1 = init(...);
KEY2 = init(...);
KEY3 = init(...);
// ...
}
private static void initialise1001To2000() {
// ...
KEY2000 = init(...);
}
}
이것의 단점은 내가 할 수있는 것입니다 final
으로 더 이상 선언하지 않습니다. 더 이상 static initialiser에서 더 이상 초기화되지 않기 때문입니다.
제 질문은 어떻게하면 static final
상수를 생성 할 수있는 방법으로 해당 컴파일러/JVM 제한을 우회 할 수 있습니까?
? 이 코드가 다른 파일에서 자동 생성 되었습니까? – templatetypedef
@templatetypedef : 이것은 [jOOQ] (http://www.jooq.org)의 소스 코드 생성기에있는 실제 버그입니다. 기본 키, 고유 키 및 외래 키를 데이터베이스에서 상수 개체로 생성합니다. jOOQ가 처리 할 수있는 2000 개의 키가 너무 많습니다. https://groups.google.com/d/topic/jooq-user/2g96fI1Yrj8/discussion –
"더미"상속 레이어를 사용할 수 있습니까? 1,000 개의 상수를 포함하고 static initializer가 설정된 비공개 사용 이름을 가진 기본 클래스를 만듭니다. 그런 다음 1,000 개를 더한 파생 클래스, 1,000 개를 추가하는 하위 클래스 등이 있습니까? 가장 많이 파생 된 클래스 만 어셈블리의 다른 클래스의 파생을 제외하고는 어떤 목적 으로든 사용됩니다. – supercat