请有人帮忙:
HelloWorld.java
public class HelloWorld {
public static void main(String []args) {
System.out.println("Hello World");
HelloWorld he = new HelloWorld();
Newfile ne = new Newfile();
System.out.println(ne.a);
he.puaa(new Newfile());
}
public String puaa(Object o) {
System.out.println(">> " + o.a);
return null;
}
}
Newfile.java
public class Newfile {
String a="paa";
public static void main(String []args) {
System.out.println("Hello World");
}
}
我正在将NewFile()
传递给Object
类并尝试使用Object的引用来访问该对象的变量,我正在
HelloWorld.java:12: error: cannot find symbol
System.out.println(">> " +o.a);
^
symbol: variable a
location: variable o of type Object
更新:我想将任何对象传递给puaa(Object o)方法,该对象将始终具有变量a。所以解决方案应该是它应该适用于所有人而不仅仅适用于NewFile。
答案 0 :(得分:1)
Object
是一个非常通用的类,它没有任何名为a的字段。你有一些解决方案:
将参数设为NewFile
而不是任何对象。在我看来,这是更好的一个,因为显然puaa
只能在NewFile
对象上运行。
public String puaa(NewFile o) {
将o
投放到NewFile
。我不推荐这个,因为如果你传递的东西不是NewFile实例,它会引发异常,所以第一个解决方案比这更好。
System.out.println(">> " + ((NewFile) o).a);
答案 1 :(得分:1)
你做不到。 Object
可以是任何内容:String
,Integer
,HashMap
,ExecutorService
...而且从这4个示例中,没有一个是密切合作的与您的NewFile
课程相关。
最好的替代方法是为您的类声明一个超级(抽象)类或接口,并将此超类型的参数传递给该方法。
这是一个小例子:
public abstract class MyFile {
protected String a;
public MyFile(String a) {
this.a = a;
}
public String getA() {
return a;
}
}
public class NewFile extends MyFile {
public MyFile(String a) {
super(a);
}
}
public class OldFile extends MyFile {
/* add your implementation... */
}
public class Main {
public static void main(String[] args) {
//you can replace here by using new OldFile
MyFile myFile = new NewFile("foo");
Main main = new Main();
main.puaa(myFile);
}
public void puaa(MyFile myFile) {
System.out.println(myFile.getA());
}
}
答案 2 :(得分:1)
创建界面
public interface HasA {
String getA();
}
在要与puaa
一起使用的所有类上添加此接口public void puaa(HasA o){
System.out.println(">> " + o.getA());
}
答案 3 :(得分:-1)
您需要将其强制转换为NewFile
个对象。它正在查看基础Java
类Object
以查找不存在的方法a
。
System.out.println(">> " + ((NewFile)o).a);
您可以尝试逐个播放每个班级,然后抓住ClassCastException
,直到您获得所需的课程。