Java告诉我在尝试运行main方法时找不到getName()。我不知道为什么,我看了看堆栈交换无济于事。这似乎是一个简单的解决方案,但我似乎无法弄明白。
import java.util.*;
public class ArrayTester
{
public static ArrayList<Object> array;
public static void main(String args[])
{
array = new ArrayList<Object>();
array.add(new TestObject("Some Name"));
System.out.println("Object Name: " + array.get(0).getName());
}
}
对象:
public class TestObject
{
private String name;
public TestObject(String cname){
name = cname;
}
public String getName(){
return name;
}
}
提前感谢您的帮助。如果在某处我没有看到相同的问题,我道歉。
答案 0 :(得分:2)
Java告诉我,当我尝试运行main时,它找不到getName() 方法
将 (total - used) / total * 100%
= (463.19 - 351.60) / 463.19 * 100%
= 111.59 / 463.19 * 100%
= 24.091%
类投射到Object
类以使用TestObject
类的方法。由于TestObject
将array.get(0)
类作为对象返回。 Object
类中没有这样的方法getName()
。
变化
Object
到
System.out.println("Object Name: " + array.get(0).getName());
答案 1 :(得分:1)
您创建了一个名为TestObject
的类,因此您应该使用TestObject
创建数组,而不是Object
:
public class ArrayTester
{
public static ArrayList<TestObject> array;
public static void main(String args[])
{
array = new ArrayList<TestObject>();
array.add(new TestObject("Some Name"));
System.out.println("Object Name: " + array.get(0).getName());
}
}
或者至少投下它:
System.out.println("Object Name: " + ((TestObject) array.get(0).getName());
答案 2 :(得分:1)
如果要在ArrayList中存储不同类型的对象,您应该了解这些对象的常见内容。例如,所有这些都有一个名称。然后,您可以创建一个名为TestInterface的接口:
public interface TestInterface {
String getName();
}
接口定义了getName()方法,实现它的所有类也包含getName()。
TestClass应该实现TestInterface:
public class TestObject implements TestInterface {
private String name;
public TestObject(String cname) {
name = cname;
}
public String getName() {
return name;
}
}
你也可以写一个OtherClass:
public class OtherClass implements TestInterface {
public String getName() {
return "OtherClass getName method";
}
}
你的主要:
public class ArrayTester {
public static ArrayList<TestInterface> array;
public static void main(String args[]) {
array = new ArrayList<TestInterface>();
array.add(new TestObject("Some Name"));
array.add(new OtherClass());
for (TestInterface t: array) {
System.out.println("Object Name: " + t.getName());
}
}
}
您可以将实现TestInterface的所有类的实例传递给ArrayList,当您迭代它时,Java会调用getName()方法的具体实现。
输出:
Some Name
OtherCalss getName method
Cast也可以工作,但它不是类型安全的。在Object类型的ArrayList中,您可以传递各种对象。将String传递给它时也可以。它编译,但是当你尝试将String转换为TestObject时,你将有一个ClassCastException。
答案 3 :(得分:0)
您可以使用 instanceof 功能,并在适当的投射前在 if 块中进行比较:
public static void main(String args[])
{
String name;
array = new ArrayList<Object>();
array.add(new TestObject("Some Name"));
for (Object o : array) {
if(o instanceof TestObject){
System.out.println("Object Name: " + ((TestObject) o).getName());
}
}
}
和o是其他类的实例你可以简单地比较它,如果阻塞并在转换后调用相应的函数,如:
public static void main(String args[])
{
String name;
array = new ArrayList<Object>();
array.add(new TestObject("Some Name"));
for (Object o : array) {
if(o instanceof TestObject){
System.out.println("Object Name: " + ((TestObject) o).getName());
}
else if(o instanceof SomeObject){
System.out.println("Object Name: " + ((SomeObject) o).getSomeObjectFunction());
}
}
}
我希望这能解决你的问题。