繁体   English   中英

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

[英]java.lang.object cannot be converted to (selfmade class)

我是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);

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

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

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

如果您的对象类型确实与ArrayList兼容,您可以键入将其ArrayList转换为object类型,如:

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

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

此外,您需要快速查看有关类名称大写的java编码约定以及对变量和方法名称使用camelCase; 它会让你的代码更具可读性。

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

此外,您应该将object重命名为其他内容,例如ThingItem ,否则可能会导致混淆,拼写错误,读取错误(即您可能以后认为您写的是O bject not o bject)等等。所有类名也被推荐写在大骆驼案中

进一步阅读

Java Generics: Oracle.com上的Java泛型教程

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM