Java 如何从对象类引用访问对象?
请任何人在以下方面提供帮助: HelloWorld.javaJava 如何从对象类引用访问对象?,java,Java,请任何人在以下方面提供帮助: 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
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
类,并尝试使用对象的引用访问该对象的变量,我得到
HelloWorld.java:12: error: cannot find symbol
System.out.println(">> " +o.a);
^
symbol: variable a
location: variable o of type Object
更新:我想将任何对象传递给puaa(对象o)方法,该对象将始终具有变量。所以,解决方案应该是这样的,它应该适用于所有人,而不仅仅适用于NewFile。您需要将其强制转换为
NewFile
对象。它正在查看基本Java
类对象
,查找不存在的方法a
System.out.println(">> " + ((NewFile)o).a);
您可以尝试一个接一个地强制转换到每个类,以捕获
ClassCastException
,直到获得所需的类。Object
是一个非常通用的类,它没有任何名为a的字段。您有一些解决方案:
- 将参数设置为
,而不是任何对象。在我看来,这是一个更好的方法,因为显然,NewFile
只对puaa
对象进行操作NewFile
public String puaa(NewFile o) {
- 将
转换为o
。我不建议这样做,因为如果您传递的不是NewFile实例,它将抛出一个异常,因此第一个解决方案比这个更好NewFile
System.out.println(">> " + ((NewFile) o).a);
- 你不能那样做<代码>对象可以是任何东西:一个
字符串
、一个整数
、一个哈希映射
、一个执行服务
。。。从这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());
}
}
创建接口
public interface HasA {
String getA();
}
在要与puaa一起使用的所有类上添加此接口
public void puaa(HasA o){
System.out.println(">> " + o.getA());
}
@LuiggiMendoza然后处理抛出的
ClassCastException
。它不会编译,因为对象没有属性“a”@sunrise76,它是由于向下投射而编译的。@LuiggiMendoza就像我在处理抛出的异常之前所说的那样。这取决于OP试图做什么。@Emd4600从未说过这不是更好的。只是给了他一个简单的回答。如果你读了他的其他评论,这实际上就是他想要的。如果你不发送一个新文件对象引用,而是发送一个与OldFile()结构相同的其他对象引用,会怎么样。我想要一个能容纳任何类型并能转换成任何类型的引用type@fatherazrael这是不可能实现的。Java具有强大的类型功能。除非OldFile
扩展Newfile
,否则不会发生这种情况,但您必须了解这将是一个非常奇怪的设计。然后,使OldFile
继承Newfile
或使两者都继承一个新类,我正在尝试使用另一个接口,该接口由Newfile和Oldfile实现。但仍然存在一个问题,即该接口中应该声明变量a,您必须在您正在创建的接口中声明a
。另外请注意,参数类型现在必须是该接口。有一种方法可以做你想做的事情看看我的答案。如果抛出了ClassCastException
,您可以尝试逐个对每个类进行强制转换,如果抛出了,则尝试对下一个类进行强制转换。您可以这样做,直到找到合适的类。如果您不想创建父接口或类
,那么我建议您尝试一下。。。