【问题标题】:How to create Record class in Java?如何在 Java 中创建 Record 类?
【发布时间】:2016-08-01 01:03:58
【问题描述】:

我有以下课程Type

class Type{
    String type;
    public Type(String type){
        this.type = type;
    }
}

我在这里初始化了几个类型:

Type cor = new Type("cor");
Type name = new Type("name")

现在我想要一个名为Record的类,

class Record{
    String name;
    Type[] types;
    public Record(String name, Type[] types){
        this.name = name;
        this.types = types;
    }
}

好吧,我被困在这里了。我想要做的是初始化类Record的实例时,像这样:

Record rec = new Record("Position", ...);

应该是这样的,我这里举个位置记录的例子:

Record Position = [cor x, cor y, name z];

那么在这里使用 Type[] 是一个不错的选择吗?我发现很难同时记录类型和变量名,例如xy; 还是应该使用 HashMap?

【问题讨论】:

  • Record 类试图建模什么?它目前看起来像是任意数据类型的容器(因此不是很有用)。此外,Type 只是命名字符串的包装器;它应该用来做什么?
  • 呃,int 是原始类型,不是 Type 类型
  • 我把它留在这里只是为了让这个问题在这里更清楚。问题是在记录类中同时记录类型实例和类型名称
  • 好吧,如果你想要一个既有类型名又有变量名的类,你需要定义一个有类型名和变量名的类(或者Type和一个变量名),而不是只有一个类型名的Type
  • 你可以让这个类成为一个通用的 {name, type, value} 容器,但我仍然看不到这里的大局。例如:public class Type<T> { String name; Class<T> clazz; T value; public Type(String name, Class<T> clazz, T value){ this.name = name; this.clazz = clazz; this.value = value; } }

标签: java arrays dictionary record


【解决方案1】:

如果没有关于您要建模的内容的更多信息,很难回答这个问题。您的“位置”示例相当混乱,因为它暗示单个记录具有多个不同类型的“变量”。但是我假设一条记录可以有多种类型。目前还不清楚类型是否可以改变以及是否存在固定的类型集。

理想情况下,类型集是静态的,您可以使用类型枚举:

enum RecordType {
    COR, NAME, ...;
}

class Record {
    public Record(String name, EnumSet<RecordType> types) {
        ...
    }
}

然后创建一条新记录如下所示:

Record record = new Record("My record", EnumSet.of(RecordType.NAME));

如果类型集不是静态的,那么您将需要定义一个类。在这种情况下,我建议您使用 Set&lt;RecordType&gt; 而不是 RecordType[] 作为构造函数参数。这清楚地表明它是一组类型(即没有重复),并避免了您需要对数组进行的所有错误检查。

如果一条记录可以有多个不同类型的值,那么您需要有一个Map&lt;RecordType,String&gt; 成员变量。在这种情况下,我建议不要尝试在构造函数中定义值。而是使用 addTypeValue 方法向地图添加值。

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 2021-07-08
    • 1970-01-01
    • 2013-01-05
    • 2016-06-20
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多