在Java中,是否可以访问作为方法中的参数传递的对象的字段?
示例代码:
void myMethod(ArrayList<Integer> list, MyClass object) {
Integer myInt = object.x; // x is an Integer-type field in the object
}
我尝试了以下内容:
MyClass curObj = (MyClass)object;
无济于事。
有什么建议吗?
当我使用javac
进行编译时,出现cannot find symbol
错误。
答案 0 :(得分:1)
如果我正确理解了这个问题,为什么不直接访问对象?例如如果对象有一个成员memberName
和methodName()
方法,这是公开的,你可以简单地做
void myMethod(ArrayList<Integer> list, MyClass object) {
object.memberName = "member Name"
object.methodName();
}
答案 1 :(得分:1)
您不必转换'对象',因为它只是名称中的对象,您将被传递给MyClass对象。
我的意思是说你得到MyClass object
而不是Object object
要像这样访问x以确保它是公共的,但是你应该在MyClass中创建一个访问器方法:
public Integer getX()
{
return x;
}
并将您的行更改为:
Integer myInt = object.getX();
答案 2 :(得分:0)
public
。
//In MyClass
public Integer x;
如果您未公开声明,则必须提供getter方法。这是正常情况(私人+ getter)JAVA Bean ...
//In MyClass
private Integer x;
public Integer getX()
{
return x;
}
void myMethod(ArrayList<Integer> list, MyClass object) {
Integer myInt = object.getX(); // x is an Integer-type field in the object
}
答案 3 :(得分:0)
除非
,否则没有理由不起作用object
为null(但这是运行时,而不是编译时错误)x
不公开,myMethod
不是MyClass
类的方法答案 4 :(得分:0)
是的,如果您的属性被声明为public,则可以。例如:
public class MyClass {
public int test;
}
class Test {
public printMyClass( MyClass c ) {
System.out.println( c.test );
}
}
或者您可以使用一个返回测试值的方法,只有MyClass可以修改测试属性(更好)。
public class MyClass {
private int test;
public int getTest() {
return test;
}
}
class Test {
public printMyClass( MyClass c ) {
System.out.println( c.getTest() );
}
}
答案 5 :(得分:0)
只有当MyClass.x
是公众时,才是。否则,您可以通过该属性的getter / setter方法访问它。 Java实际上是将引用的副本传递给对象,因此虽然被调用的方法仅适用于引用副本,但无论是通过引用还是引用的副本访问它,底层对象都是相同的。对象的状态也会在被调用方法中发生潜在变化。