【问题标题】:Why does my type-casting doesn't work with an object?为什么我的类型转换不适用于对象?
【发布时间】:2020-10-23 15:50:44
【问题描述】:

使用 Java SE 11

我正在尝试创建一组不同类的实例。我想从该数组访问实例的特定方法。我使用了类型转换,但它不起作用。

如何告诉java,我尝试访问的方法在那里?

错误发生在这段代码的底部。 BillsUtilities 类具有 showInfo 方法。但是java报错了,那个类Object没有那个方法。

public static void main(String[] args) {

        Object item[] = new Object[10];
        int counter = 0;
        String newItem = "BillsUtilities";

        Date date = new GregorianCalendar(2001, Calendar.OCTOBER,12).getTime();
        int amount = 50;

        switch(newItem) {
            case "BillsUtilities":
                item[counter] = new BillsUtilities(date, amount);
                break;
            case "FriendsLover":
                item[counter] = new FriendsLover(date, amount);
                break;
            default:
                throw new IllegalStateException("Unexpected value: " + newItem);
        }

        (BillsUtilities) item[counter].showInfo();
    }

【问题讨论】:

  • ((BillsUtilities) item[counter]).showInfo(); 是你想要的。 (您当前正在转换所有内容,您首先需要转换,然后在转换的对象上调用该方法)但是考虑到代码的编写方式,如果您的 switch case 将创建,您很可能会得到一个 classcastexception一个 FriendsLover 对象。
  • 这个答案应该会有所帮助:https://stackoverflow.com/a/5762277/7994967

标签: java arrays object


【解决方案1】:

简单易懂,日式!

((BillsUtilities) item[counter]).showInfo();

但一般情况下,next sn-p 更正确:

if(item[counter] instanceof BillsUtilities)
    ((BillsUtilities) item[counter]).showInfo();

【讨论】:

    猜你喜欢
    • 2021-10-30
    • 2011-10-14
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 2022-11-25
    • 2016-11-04
    • 2022-07-22
    • 1970-01-01
    相关资源
    最近更新 更多