在我的课程中; 我有一个对象,存储他/她说话的名称,描述,语言,创建时,地址,声誉。但必须有字段是名称,描述,语言,其他字段是非强制性的。我不想写两个方法,让用户根据用途选择一个并使其他字段为空,例如;
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。
提前致谢。
答案 0 :(得分:1)
更好的选择是为变量提供getter setter方法,以便用户只能调用那些为必填字段设置值的方法。因此,尝试创建一个Bean类映射到表单,并将字段映射到变量。
答案 1 :(得分:1)
答案 2 :(得分:0)
要拥有一组不同的字段,您需要一个不同的类。如果您希望使用工厂或构建器来执行此操作,您可以为每个组合生成一个类(我之前已经完成了这个并且它不简单;)但是我会创建一个具有所有可能字段并使用它的类。
答案 3 :(得分:0)
Java中的参数没有“默认值”,因此您必须提供2个构造函数(一个可以调用另一个)。
如果您的字段非常动态,那么使用Map< String,String>作为一个参数?这通常不是一个漂亮的模式,但它可以适合您的用例。
答案 4 :(得分:0)
您可以使用可变数量的参数创建构造函数:
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");
}
}
但我可能会使用带有命名键的Map作为构造函数的参数(如上面的mauhiz所示)。
答案 5 :(得分:0)
java compiler API允许您使用可在运行时在另一个Java程序中指定的源代码调用Java编译器。可能不是您正在寻找的,但可以创建一个类,其中包含用户在运行时指定的字段来回答您的问题。如果你愿意,我可以提供一个例子。