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

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

我是 java 的新手,即将在 uni 完成编程基础知识,因此我希望能对任何答案进行详尽的解释。谢谢。另外顺便说一下,我在大学培训中使用 BlueJ,所以这可能是相关的。

无论如何,问题就在这里;我为我的一个作业做了一个文本冒险,它是非常程序化的设计,所以我决定在之后将它改造成一个更面向对象的程序。我想你只需要知道 4 class' (一些不重要的部分被遗漏了,否则这会很长,但如果你认为它们很重要,请告诉我);

库存

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();
}

问题来了;房间有一个存在于其中的对象的数组列表,对象有一个可以被玩家调用的名称的数组列表。这是我的代码,用于尝试检查 textparse class 之前识别的名词是否与任何对象的名称匹配。顺便说一下,这是在 textparse class 中;

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;
}

它 returns 引用此行的错误 'incompatible types:java.lang.Object cannot be converted to object'

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

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

你的错误的具体来源是沮丧。 inventory.getRoom().getobjects().get(counter) 的 return 类型似乎是 ArrayListArrayList 是 Java 中的 Object 类型,但你的小写字母 object 似乎是一个新的 class 定义,不是超级 class或 ArrayList 的界面。您可以将其称为 ArrayListListCollectionObject(注意大小写),但您试图将其分配给类型 object .

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

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

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

但是,我严重怀疑这在这种情况下是否有效,而且几乎可以肯定这不是您想要的;除非你知道自己在做什么,否则不要玩类型转换。 :) 我提供这个只是为了让你对类型转换做更多的研究,以便更好地理解它。

此外,您需要快速查看 java coding conventions 关于 class 名称的大写以及变量和方法名称的驼峰命名法的使用;它将使您的代码更具可读性。

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

此外,您真的应该将 object 重命名为其他名称,例如 ThingItem,否则可能会导致混淆、拼写错误、错误阅读(即您稍后可能会认为你写的是 Object 不是 object), 等等 所有 class 的名字也建议写成 大驼包[​​=31=].

进一步阅读

Java 泛型:Java Generics Tutorial at Oracle.com

Java命名规则:(懒得找了,看@DanielWiddis的回答)