gpt4 book ai didi

java - 通过方法返回对象 Bin 时遇到问题。需要 "Cast"或更改为对象

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

我是一个正在尝试学习java的初学者!

我目前正在尝试《面向对象设计中的构建技能》一书,并且目前正在研究轮盘赌。

我有一个类 Bin,它构造一个包含结果对象的 TreeSet。它们是在 Outcome 类中构造的。

现在,我正在研究 Wheel 类,在这里我使用 new Vector(38),我用 38 个 new Bin() 填充它。

现在,问题来了。

我想创建一个从 Vector 中检索 Bin 对象的方法。

Bin get(int bin){
return bins.elementAt(bin);
}

这不起作用,Eclipse 建议两个修复:

1:添加类型转换

2:将Bin更改为Object

这是怎么回事?为什么我不能按照我想要的方式返回 Bin?当我转换或更改为对象时,它不起作用。

This is the Outcome class

This is the Bin class

这是 Wheel 类

package Roulette;

import java.util.Random;
import java.util.Vector;

public class Wheel {

Vector bins;
Random rng;


Wheel(Random rng){
rng = new Random();

bins = new Vector(38);
for (int i=0; i<38; i++){
bins.add(i, new Bin());
}
}

void addOutcome(int bin, Outcome outcome){
this.bins.elementAt(bin).add(outcome);
}

Bin next(){
int rand = rng.nextInt(38);

return bins.elementAt(rand);

}

Bin get(int bin){
return bins.elementAt(bin);
}

}

最佳答案

编译器在运行时不知道您将从 bins.elementAt() 中得到什么。由于您尚未定义类型,因此它需要任何类的对象(Object 实例),该对象可能属于或不属于 Bin 类。

所以,你所拥有的是(对于编译器)

  Object a = new Bin();
Bin b = a;

由于编译器不确定,它需要您对其进行强制转换以确保它将返回适当的类型(如果存在强制转换错误,则失败)。无论如何,你必须明确这一点

  Object a = new Bin();
Bin b = (Bin) a; // compiles and works

Object a = new String("Hello world");
Bin b = (Bin) a; // compiles but fails at runtime with ClassCastException.

另一种方法是使用泛型来指定 Vector 仅包含 Bin 实例

  Vector<Bin> bins = new Vector<Bin>();

这样编译器将确保 bins.getElement() 返回一个 Bin 对象。

关于java - 通过方法返回对象 Bin 时遇到问题。需要 "Cast"或更改为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16212668/

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