我是一个正在尝试学习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?当我转换或更改为对象时,它不起作用。
这是 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/