gpt4 book ai didi

java - 为什么 JAXB 生成的类具有 protected 成员,我该如何更改它?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:52:17 24 4
gpt4 key购买 nike

我一直在互联网上搜索 JAXB 生成的类具有 protected 成员(所有成员,无论继承如何)的原因。

我希望成员是私有(private)的。

我的搜索是空的。

我有普通的 xsd 文件,这些文件使用 Maven 和 JAXB 转换为 Java 类。理想情况下,生成的成员应该是私有(private)的,但我找不到实现此目的的方法。

有没有办法修改这个默认行为?

最佳答案

好吧,我要回答我自己的问题。创建插件是正确的方法。

我编写了以下插件,它似乎可以工作。

public class PrivateMemberPlugin
extends Plugin
{

@Override
public String getOptionName()
{
return "Xpm";
}

@Override
public String getUsage()
{
return " -Xpm : Change members visibility to private";
}

@Override
public boolean run(Outline model, Options opt, ErrorHandler errorHandler)
throws SAXException
{
for (ClassOutline co : model.getClasses())
{

JDefinedClass jdc = co.implClass;
// avoid concurrent modification by copying the fields in a new list
List<JFieldVar> fields = new ArrayList<JFieldVar>(jdc.fields().values());
for (JFieldVar field : fields)
{
// never do something with serialVersionUID if it exists.
if (!field.name().equalsIgnoreCase("serialVersionuid"))
{
// only try to change members that are not private
if (field.mods().getValue() != JMod.PRIVATE)
{
// since there is no way to change the visibilty, remove the field an recreate it
jdc.removeField(field);
jdc.field(JMod.PRIVATE, field.type(), field.name());

}
}
}

}
return true;
}

}

如果需要,请随意使用。

关于java - 为什么 JAXB 生成的类具有 protected 成员,我该如何更改它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9377923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com