Похоже, вы собираетесь использовать свой собственный плагин XJC. Итак, вот что вам нужно сделать. Замените строку --> DO SOMETHING WITH THIS FIELD
на следующую.
Сначала выясните, какой тип параметризации fo[i]
(который я называю f).
Затем создайте Set JType. И, наконец, установите тип f
на setType
:
JType inner = ((JClass)f.type()).getTypeParameters().get(0);
JType setType = co.parent().getCodeModel().ref(Set.class).narrow(inner);
f.type(setType);
Метод narrow()
используется для установки типа параметризации.
Пока выглядит хорошо, но проблема в том, что плагин будет работать после того, как XJC завершит генерацию классов. Что означает, что геттер уже есть. Поэтому нам нужно заменить его.
А вот и метод replaceGetter()
private void replaceGetter(ClassOutline co, JFieldVar f, JType inner) {
//Create the method name
String get = "get";
String name = f.name().substring(0, 1).toUpperCase()
+ f.name().substring(1);
String methodName = get+name;
//Create HashSet JType
JType hashSetType = co.parent().getCodeModel().ref(HashSet.class).narrow(inner);
//Find and remove Old Getter!
JMethod oldGetter = co.implClass.getMethod(methodName, new JType[0]);
co.implClass.methods().remove(oldGetter);
//Create New Getter
JMethod getter = co.implClass.method(JMod.PUBLIC, f.type(), methodName);
//Create Getter Body -> {if (f = null) f = new HashSet(); return f;}
getter.body()._if(JExpr.ref(f.name()).eq(JExpr._null()))._then()
.assign(f, JExpr._new(hashSetType));
getter.body()._return(JExpr.ref(f.name()));
}
Надеюсь, вы найдете это полезным.