gpt4 book ai didi

java - 访问Java中的公共(public)类

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:58 25 4
gpt4 key购买 nike

我有两个不同的类,它们具有与私有(private)字段相同的类。这个私有(private)字段需要从一个类传递到另一个类(或在另一个类中访问),但我不确定如何。

这是我正在尝试做的一个示例:

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 的 distance 方法发挥作用,它需要传递一个 RealVector 给它,但是 Neuron 的 distance 方法只传递一个 Observation 给它,其中包含一个 vector 作为私有(private)字段。我可以想到一些解决方法,但我不太喜欢它们。

1) 让 Observation 和 Neuron 扩展 RealVector 类。然后我什至不必编写距离函数,因为它只使用父类(super class)(RealVector)距离方法。我不太喜欢这个解决方案,因为 Observation 和 Neuron 与 RealVector 类具有“has a”关系,而不是“is a”关系。

2) Observation 类中有一个返回 RealVector 的方法。

public RealVector getAttributes() {
return attributes;
}

我不喜欢这个解决方案,因为它违背了将 RealVector 字段私有(private)化的目的。在这种情况下,我不妨将属性公开。

我可以让它返回类中 RealVector 的(深层)副本。这种方法似乎效率低下,因为每次调用 getAttributes() 时我都必须复制 RealVector(本质上是复制一个数组)。

3) 使用接口(interface)。没有对接口(interface)做太多工作,所以我不太确定它们在这里是否合适。

有谁知道我可以将属性保留为观察的私有(private)成员并完成我希望在神经元的距离方法中完成的任务吗?

最佳答案

如果您的 Observer 类具有接受 RealVector 的距离方法,那么您无需公开私有(private) RealVector 属性

public class Observation {

private RealVector attributes;

public double distance(RealVector weight){
return weight.distance(attributes);
}
}

public class Neuron {

private RealVector weight;

public double distance(Observation obs) {
return obs.distance(weight);
}
}

关于java - 访问Java中的公共(public)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12084012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com