プライベートフィールドと同じクラスを持つ2つの異なるクラスがあります。このプライベートフィールドは、あるクラスから別のクラスに渡す(または他のクラスでアクセスする)必要がありますが、方法がわかりません。
これが私がやろうとしていることの例です:
public class RealVector() {
private double[] components;
// Other fields and methods in here
public double distance(RealVector vec) {
// Some code in here
}
}
public class Observation() {
private RealVector attributes;
// Other fields and methods in here
}
public class Neuron() {
private RealVector weight;
// Other fields and methods in here
public double distance(Observation obs) {
return weight.distance(obs.attributes); // This is what I want to do, but it won't work, since attributes is private
}
}
RealVectorの距離メソッドが機能するには、RealVectorが渡される必要がありますが、Neuronの距離メソッドには、プライベートフィールドとしてベクトルを含むObservationのみが渡されます。いくつかの回避策を考えることができますが、私はそれらが本当に好きではありません。
1)ObservationとNeuronにRealVectorクラスを拡張させます。そうすれば、スーパークラス(RealVector)の距離メソッドを使用するだけなので、距離関数を作成する必要もありません。オブザベーションとニューロンはRealVectorクラスと「hasa」関係にあり、「is a」関係ではないため、このソリューションはあまり好きではありません。
2)RealVectorを返すObservationクラスのメソッドがあります。
public RealVector getAttributes() {
return attributes;
}
このソリューションは、RealVectorフィールドをプライベートにするという目的に反するため、好きではありません。この場合、属性を公開したほうがよいでしょう。
クラス内のRealVectorの(深い)コピーを返すようにすることができます。getAttributes()を呼び出すたびに、RealVectorのコピーを作成する(基本的には配列をコピーする)必要があるため、このアプローチは非効率的です。
3)インターフェースを使用します。インターフェイスについてはあまり行っていないので、ここで適切かどうかはわかりません。
私がObservationのプライベートメンバーとして属性を保持し、Neuronの距離法で私が探していることを達成する方法を知っている人はいますか?