2

在我的程序中;我有一个对象,它存储姓名、描述、他/她说的语言、创建时、地址、声誉。但是必须有的字段是名称、描述、语言,其他的不是强制性的。我不想写两个方法,让用户选择一个,根据使用情况使其他字段为空,例如;

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。

提前致谢。

4

6 回答 6

1

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

于 2012-09-21T07:51:14.493 回答
1

请查看以下解释 Builder 模式的 URL。

https://stackoverflow.com/a/1953567/705315

~HTH

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

于 2012-09-21T08:39:04.887 回答
0

You can make a constructor with a variable number of arguments:

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");
    }
}

But I would probably use a Map with named keys as the parameter to your constructor (as suggested by mauhiz above).

于 2012-09-21T07:55:36.417 回答
0

The java compiler API allows you to invoke the Java compiler with source code that you can specify at runtime in another java program. Probably not what you are looking for, but it is possible to create a class with fields the user specifies at runtime to answer your question. I can provide an example if you want.

于 2012-09-21T07:56:57.227 回答
0

Java 中的参数没有“默认值”,因此您必须提供 2 个构造函数(一个可以调用另一个)。

如果您的字段非常动态,那么使用 Map<String, String> 作为单个参数怎么样?这通常不是一个漂亮的模式,但它可能适合您的用例。

于 2012-09-21T07:46:14.230 回答
0

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

于 2012-09-21T07:45:03.560 回答