, 당신은 단지 자신 필드 생성에 직접 초기화를 추가 할 수 있습니다
고려 당신이해야 일반적으로 program to an interface 인 경우 "가능한 한 기본"유형을 사용하여 변수를 선언하는 것이 좋습니다. 당신은 거의 적는
private HashMap map;
로 변수를 선언해서는 안하지만, 기본적으로 항상에만
로 private Map map;
는 Map
때문에 여기에 관련되는 인터페이스입니다.
제네릭을 JCodeModel에 추가 할 수도 있습니다. 일반적으로 특정 유형의 전화는 narrow
입니다. 좀 더 노력하지만 원시 형식으로 인해 경고가 발생하지 않고 컴파일 할 수있는 코드가 생성됩니다.
예가 여기에 나와 있습니다. (이 맵의 값 형으로 키 유형 및 Integer
으로 String
사용 그에 따라이를 조정할 수 있습니다.) 다음과 같이 생성 된 클래스 보이는
import java.util.HashMap;
import java.util.Map;
import com.sun.codemodel.CodeWriter;
import com.sun.codemodel.JClass;
import com.sun.codemodel.JCodeModel;
import com.sun.codemodel.JDefinedClass;
import com.sun.codemodel.JExpr;
import com.sun.codemodel.JMod;
import com.sun.codemodel.writer.SingleStreamCodeWriter;
public class InitializeFieldInCodeModel
{
public static void main(String[] args) throws Exception
{
JCodeModel codeModel = new JCodeModel();
JDefinedClass definedClass = codeModel._class("com.example.Example");
JClass keyType = codeModel.ref(String.class);
JClass valueType = codeModel.ref(Integer.class);
JClass mapClass =
codeModel.ref(Map.class).narrow(keyType, valueType);
JClass hashMapClass =
codeModel.ref(HashMap.class).narrow(keyType, valueType);
definedClass.field(JMod.PRIVATE, mapClass, "initAttributes")
.init(JExpr._new(hashMapClass));
CodeWriter codeWriter = new SingleStreamCodeWriter(System.out);
codeModel.build(codeWriter);
}
}
:
package com.example;
import java.util.HashMap;
import java.util.Map;
public class Example {
private Map<String, Integer> initAttributes = new HashMap<String, Integer>();
}