Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在哪里初始化派生字段?_Java - Fatal编程技术网

Java 在哪里初始化派生字段?

Java 在哪里初始化派生字段?,java,Java,我有一个类X,其中x1,x2等字段。我需要为类X(它唯一地标识类X的实例)定义一个键。因此,我用classX的字段子集创建了一个类键。class Key的实例将是classX的字段。初始化密钥的最佳位置是什么 public class X { int x1; int x2; int x3; Key key; } public class Key { int x1; int x3; } 我有override equals和hashcode方法,它们应该基于k

我有一个类
X
,其中
x1
x2
等字段。我需要为类
X
(它唯一地标识类
X
的实例)定义一个键。因此,我用class
X
的字段子集创建了一个类键。class Key的实例将是class
X
的字段。初始化密钥的最佳位置是什么

public class X {
   int x1;
   int x2;
   int x3;
   Key key;
}

public class Key {
   int x1;
   int x3;
}

我有override equals和hashcode方法,它们应该基于key来工作。

如果该key对于X的每个实例都是唯一的,那么就在构造函数方法中生成它。

我不会将key类保留为字段。我会考虑提供一个吸收器,每次调用它时都会返回一个新的密钥实例。p> 更好的是,key类可以保存对X的引用,并在调用equals/hash时访问其字段。这样,您就不必手动更新密钥的任何值


同样,您可以在X中实现
hashCode
equals
,并使用
HashSet
而不是
HashMap

key.x1和
key.x3
的值应该是什么?它们会在运行时生成吗?它们是静态的吗?这取决于初始化字段时使用的内容。一旦初始化,X字段的值将不会更改,但值是什么?它们是随机的吗?或者它们在编译时已知?在编译时未知