gpt4 book ai didi

java - 解释对象和类的这种不同表示

转载 作者:行者123 更新时间:2023-12-01 18:46:50 24 4
gpt4 key购买 nike

在这里myClass我无法理解那些凝视的线条。谁能解释一下他们是如何工作的。

class myClass {
private Vector locations;

private void distances() {
Vector locn= locations;
if (locn!= null) {
for (int i = 0; i < locn.size(); i++) {
** Restaurant a = (Restaurant) locn.elementAt(i);
** a.setDistance(distanceToLocations(a));
}
}
}

private String distanceToLocations(Restaurant restaurant) {
// returns string
}
}

这里 Restaurant是一个类 setDistance()是类 Restaurant 的方法

最佳答案

elementAt方法Vector定义为返回 Object ,但显然locations包含Restaurant条目。所以为了访问Restaurant方法,您必须转换Object 返回的引用至Restaurant 。这就是 (Restaurant)部分(Restaurant)locn.elementAt(i);正在做。

这是相当老式的代码。现代方法是使用 Vector<Restaurant> (或者可能 List<Restaurant> 如果您不需要同步)和增强型 for循环:

class myClass
{
private List<Restaurant> locations;

private void distances()
{
List<Restaurant> locn = locations; // You don't really need to do this bit
if (locn!= null) {
for (Restaurant a : locn) {
a.setDistance(distanceToLocations(a));
}
}
}

private String distanceToLocations(Restaurant restaurant) {
// returns string
}
}

注意我已经改变了VectorList 。你永远不会展示如何locations已初始化,但带有 List<Restaurant>你会做类似的事情:

this.locations = new ArrayList<Restaurant>();
// or
this.locations = new LinkedList<Restaurant>();

我猜你并不真正需要同步。不过,如果您这样做,java.util中有更好的选择比Vector ,例如使用 Collections.synchronizedList 获取同步列表,或使用 java.util.concurrent 中的一些内容。并且您需要在循环期间进行同步。例如:

this.locations = Collections.synchronizedList(new ArrayList<Restaurant>());

然后

synchronized (locn) {
for (Restaurant a : locn) {
a.setDistance(distanceToLocations(a));
}
}
<小时/>

旁注:Java 代码中压倒性的约定是类名以大写字符开头并使用 CamelCase,例如MyClass不是myClassmyClass看起来像一个变量或字段。您不必遵循约定,但这样做可以帮助人们阅读您的代码。

关于java - 解释对象和类的这种不同表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17389065/

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