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

标签 java

我是一个正在尝试学习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/

相关文章:

java - GSON 如何决定它在反序列化过程中使用哪个 TypeAdapter?

java - OSGI服务改变方法

java - 获取选项卡式 Activity 的当前选定选项卡

java - 计算复活节星期天的日期

java - 如何从另一个类中的外部化 JPanel 设置框架的标题?

java - IntelliJ 没有看到我的 OpenGL 版本

c# - Java只是没有跟上吗?

java - 嵌入式作业执行而不是触发执行

java - 谷歌应用程序中的 Java IDE

Java小程序drawString不工作