Java 如何根据用户提供的字段创建字段?

Java 如何根据用户提供的字段创建字段?,java,oop,design-patterns,optimization,Java,Oop,Design Patterns,Optimization,在我的节目中; 我有一个存储姓名、描述、他/她所说的语言、创建时的地址、声誉的对象。但是必须包含的字段是名称、描述、语言,其他字段是非强制性的。我不想编写两个方法,让用户选择一个,并根据用法将其他字段设置为null,例如 inside of constructor(name, description, languages) { this.name = name; this.description = description; this.languages = langua

在我的节目中; 我有一个存储姓名、描述、他/她所说的语言、创建时的地址、声誉的对象。但是必须包含的字段是名称、描述、语言,其他字段是非强制性的。我不想编写两个方法,让用户选择一个,并根据用法将其他字段设置为null,例如

inside of constructor(name, description, languages) {
    this.name = name;
    this.description = description;
    this.languages = languages;
    this.address = " ";
    this.reputation = " ";
}

inside of constructor(name, description, languages, address, reputation) {
    this.name = name;
    this.description = description;
    this.languages = languages;
    this.address = address;
    this.reputation = reputation;
}
那么我该如何解决这个问题呢?是否有一种方法可以根据用户提供的字段创建字段

我正在使用java


提前感谢。

要有不同的字段集,您需要不同的类。如果您希望使用工厂或构建器来实现这一点,您可以为每个组合生成一个类(我以前做过,这并不简单;),但我会创建一个包含所有可能字段的类并使用它。

Java中没有参数的“默认值”,因此您必须提供两个构造函数(不过,一方可以打电话给另一方)


如果您的字段是动态的,那么使用映射作为单个参数如何?这通常不是一个很好的模式,但它可以适合您的用例。

更好的选择是为变量提供getter setter方法,以便用户只能调用那些为必填字段设置值的方法。因此,请尝试创建Bean类ma映射到表单,并将字段映射到变量。

您可以创建具有可变参数数的构造函数:

public class VarArg {
    public VarArg(String ... args)
    {
        String a = args[0];
        String b = args[1];
    }

    public static void main(String[] args)
    {
        VarArg arg1 = new VarArg("hello");
        VarArg arg2 = new VarArg("hello","goodbye");
    }
}

但是我可能会使用一个带有命名键的映射作为构造函数的参数(正如上面mauhiz所建议的)ch解释了构建器模式

~HTH


PS:无法对您的问题发表评论。因此作为答案发布。

您不需要两个构造函数有什么特别的原因吗?@Fildor第一个原因是我不想创建冗余字段并将其设为null。另一个原因是我认为这些类型的代码不太好,因为可选字段通常不用于是吗?无意冒犯,但我觉得这有点过分了。也许是个人品味的问题。不过有一个提示:你考虑过装饰图案吗?