访问在Java中作为参数传递的对象的字段?

时间:2012-01-18 19:32:38

标签: java object parameter-passing field

在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错误。

6 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,为什么不直接访问对象?例如如果对象有一个成员memberNamemethodName()方法,这是公开的,你可以简单地做

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)

当然

您的示例代码应该按原样运行 看到字段x在MyClass中有单词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实际上是将引用的副本传递给对象,因此虽然被调用的方法仅适用于引用副本,但无论是通过引用还是引用的副本访问它,底层对象都是相同的。对象的状态也会在被调用方法中发生潜在变化。