Доступ к полям объекта, переданного в качестве параметра в Java? - PullRequest
1 голос
/ 18 января 2012

Возможно ли в 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 ]

1 голос
/ 18 января 2012

Вам не нужно разыгрывать свой «объект», так как это только объект в имени, вы получаете объект MyClass.

И под этим я подразумеваю, что вы получаете MyClass object не Object object

Чтобы получить такой доступ к x, убедитесь, что он общедоступен, НО вы должны создать метод доступа в MyClass:

public Integer getX()
{
    return x;
}

и измените свою строку на:

Integer myInt = object.getX();
1 голос
/ 18 января 2012

Если я правильно понял вопрос, почему бы просто не получить доступ к объекту напрямую? например если у объекта есть методы memberName и methodName(), которые являются публичными, вы можете просто сделать

void myMethod(ArrayList<Integer> list, MyClass object) {   
    object.memberName = "member Name"
    object.methodName();
}
0 голосов
/ 18 января 2012

Только если MyClass.x является публичной, тогда да.В противном случае вы можете получить к нему доступ через методы getter / setter этого свойства.Java фактически передает копию ссылки на объект, поэтому, хотя вызываемый метод работает только с эталонной копией, базовый объект одинаков, независимо от того, обращаетесь ли вы к нему через ссылку или копию ссылки.Состояние объекта также подвержено потенциальным изменениям из вызываемого метода.

0 голосов
/ 18 января 2012

Да, это возможно, если ваш атрибут объявлен как открытый.Например:

public class MyClass {
    public int test;
}

class Test {
    public printMyClass( MyClass c ) {
        System.out.println( c.test );
    }
}

Или у вас может быть один метод, который возвращает тестовое значение, и только MyClass может изменить атрибут теста (лучше).

0 голосов
/ 18 января 2012

Нет причин, по которым это не должно работать, если

  • object равно нулю (но это будет ошибка времени выполнения, а не ошибка времени компиляции)
  • x не является общедоступным и myMethod не является методом класса MyClass
0 голосов
/ 18 января 2012

Конечно

Ваш пример кода должен работать как есть.Обратите внимание, что в поле x в вашем MyClass есть слово public.
//In MyClass
public Integer x;

Если вы не объявляете его открытым, вы должны предоставить метод получения.Это нормальный случай (приват + геттер) 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
}
...