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 类型似乎是 ArrayList。 ArrayList
是 Java 中的 Object
类型,但你的小写字母 object
似乎是一个新的 class 定义,不是超级 class或 ArrayList
的界面。您可以将其称为 ArrayList
或 List
或 Collection
或 Object
(注意大小写),但您试图将其分配给类型 object
.
有关使用 superclass 类型的更多信息,请搜索有关 Java 继承的教程。
如果您的对象类型确实与 ArrayList
兼容,您可以将其强制转换为 object
类型,例如:
object current = (object) inventory.getRoom().getobjects().get(counter);
但是,我严重怀疑这在这种情况下是否有效,而且几乎可以肯定这不是您想要的;除非你知道自己在做什么,否则不要玩类型转换。 :) 我提供这个只是为了让你对类型转换做更多的研究,以便更好地理解它。
此外,您需要快速查看 java coding conventions 关于 class 名称的大写以及变量和方法名称的驼峰命名法的使用;它将使您的代码更具可读性。
您缺少通用参数。如果这是您想要的行为,您的 getRooms()
应该 return ArrayList<object>
。
此外,您真的应该将 object
重命名为其他名称,例如 Thing
和 Item
,否则可能会导致混淆、拼写错误、错误阅读(即您稍后可能会认为你写的是 Object 不是 object), 等等 所有 class 的名字也建议写成 大驼包[=31=].
进一步阅读
Java 泛型:Java Generics Tutorial at Oracle.com
Java命名规则:(懒得找了,看@DanielWiddis的回答)
我是 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 类型似乎是 ArrayList。 ArrayList
是 Java 中的 Object
类型,但你的小写字母 object
似乎是一个新的 class 定义,不是超级 class或 ArrayList
的界面。您可以将其称为 ArrayList
或 List
或 Collection
或 Object
(注意大小写),但您试图将其分配给类型 object
.
有关使用 superclass 类型的更多信息,请搜索有关 Java 继承的教程。
如果您的对象类型确实与 ArrayList
兼容,您可以将其强制转换为 object
类型,例如:
object current = (object) inventory.getRoom().getobjects().get(counter);
但是,我严重怀疑这在这种情况下是否有效,而且几乎可以肯定这不是您想要的;除非你知道自己在做什么,否则不要玩类型转换。 :) 我提供这个只是为了让你对类型转换做更多的研究,以便更好地理解它。
此外,您需要快速查看 java coding conventions 关于 class 名称的大写以及变量和方法名称的驼峰命名法的使用;它将使您的代码更具可读性。
您缺少通用参数。如果这是您想要的行为,您的 getRooms()
应该 return ArrayList<object>
。
此外,您真的应该将 object
重命名为其他名称,例如 Thing
和 Item
,否则可能会导致混淆、拼写错误、错误阅读(即您稍后可能会认为你写的是 Object 不是 object), 等等 所有 class 的名字也建议写成 大驼包[=31=].
进一步阅读
Java 泛型:Java Generics Tutorial at Oracle.com
Java命名规则:(懒得找了,看@DanielWiddis的回答)