私はこのようなフィールドを生成したい:
public static Map<String, Class<?>> ID_MAP = new HashMap<String, Class<?>>();
WildcardTypeName.subtypeOf(Object.class) は「?」を与えることができます WildcardTypeName.subtypeOf(Class.class) は「クラス」を与えることができます
私はこのようなフィールドを生成したい:
public static Map<String, Class<?>> ID_MAP = new HashMap<String, Class<?>>();
WildcardTypeName.subtypeOf(Object.class) は「?」を与えることができます WildcardTypeName.subtypeOf(Class.class) は「クラス」を与えることができます
その型を構成要素に分解すると、次のようになります。
?
Class
Class<?>
String
Map
Map<String, Class<?>>
次に、JavaPoet の API を使用して、同じ方法でこれらのコンポーネント パーツを構築できます。
TypeName wildcard = WildcardTypeName.subtypeOf(Object.class);
TypeName cls = ClassName.get(Class.class);
TypeName clsWildcard = ParameterizedTypeName.create(cls, wildcard);
TypeName string = ClassName.get(String.class);
TypeName map = ClassName.get(Map.class);
TypeName mapStringClass = ParameterizedTypeName.create(map, string, clsWildcard);
そのタイプを取得したら、 for と同じことを簡単に行うことができ (にHashMap
置き換えるだけです)、フィールドの構築は通常どおりに行うことができます。Map.class
HashMap.class
FieldSpec.builder(mapStringClass, "ID_MAP")
.addModifiers(PUBLIC, STATIC)
.initializer("new $T()", hashMapStringClass)
.build();