java.lang.object无法转换为(自制类)

时间:2016-05-27 02:59:20

标签: java object incompatibletypeerror

我是java新手,刚刚在uni完成编程基础知识,所以我很欣赏任何答案的详尽解释。谢谢。顺便说一下,我使用BlueJ作为我大学培训的一部分,这可能是相关的。

无论如何,这是问题;我为我的一个任务做了一个文本冒险,它是非常程序化设计的,所以我决定将它改造成一个更面向对象的程序。我想你需要知道的只有4级' (遗漏了一些不重要的位,否则这将是页面长,但如果你认为它们很重要,请告诉我);

库存

static room room;


public inventory(room room)
{
    this.room = room;
}

public static room getRoom()
{
    return room;
}

ArrayList <object> objects = new ArrayList <object>();
public ArrayList getobjects()
{
    return objects;
}

对象

ArrayList<String> names = new ArrayList<String>();
public ArrayList getNames()
{
    return names;
}

textparse(textparse有一个textparse方法)

public static void textparse(String line)
{
    if (line.indexOf(" ") != -1){
        int space = line.indexOf(" ");
        noun = line.substring(space + 1, line.length()).toLowerCase();
        verb = line.substring(0, space).toLowerCase();
    }
    else
        verb = line;
    verbparse();
}

这是问题;房间里面有一个物体的arraylist,对象有一个名字的arraylist,玩家可以调用它们。这是我的代码,试图检查textparse类先前识别的名词是否与任何对象的名称匹配。顺便说一下,这是在textparse类中;

public static object nounparse()
{
    for (int counter = 0; counter < inventory.getRoom().getobjects().size(); counter++)
    {
        object current = inventory.getRoom().getobjects().get(counter);
        if (current.getNames().contains(noun)){
            return current;
        }
    }
    return null;
}

它返回错误'不兼容的类型:java.lang.Object无法转换为对象'引用此行

object current = inventory.getRoom().getobjects().get(counter);

我不确定为什么它认为这是一个Object的输出,但是由于我在该领域的经验有限,我甚至不确定对象是什么,除了类的实例的一般分类器。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

您的错误的具体来源是向下倾斜。 inventory.getRoom().getobjects().get(counter)的返回类型似乎为ArrayList。 Java中的ArrayList类型为Object,但您的小写object似乎是一个新的类定义,它不是ArrayList的超类或接口。您可以将其称为ArrayListListCollectionObject(请注意大小写),但您尝试为其指定object类型

有关使用超类类型的更多信息,请搜索有关Java继承的教程。

如果您的对象类型确实与ArrayList兼容,则可以输入object类型,例如:

object current = (object) inventory.getRoom().getobjects().get(counter);

然而,我严重怀疑在这种情况下会起作用,几乎肯定不是你想要的;除非你知道自己在做什么,否则不要进行类型转换。 :)我只为你提供这方面的更多关于类型转换的研究,以便更好地理解它。

此外,您需要快速查看java coding conventions关于类名的大小写以及将camelCase用于变量和方法名称;它会让你的代码更具可读性。

答案 1 :(得分:0)

您缺少通用参数。如果这是您期望的行为,则getRooms()应该返回ArrayList<object>

此外,您应该将object重命名为其他内容,例如ThingItem,否则可能会导致混淆,拼写错误,读取错误(即您可能以后认为自己写了 O bject not o bject)等。建议所有类名都写在 Big Camel Case 中。

进一步阅读

Java Generics:Java Generics Tutorial at Oracle.com

Java命名约定:(懒得找一个,看@DanielWiddis的答案)