Параметры объекта в конструкторе - PullRequest
1 голос
/ 03 апреля 2012

Прежде всего, я прошу прощения, если мой вопрос трудно понять. Я с трудом пытаюсь объяснить, в чем именно мне нужна помощь. Я новичок в Java и концепции передачи по ссылке и т. Д.

По сути, мне нужно знать, почему приведенный ниже код неверен. Как мне сказать Java использовать метод для объекта, переданного в качестве параметра конструктора? Снова прошу прощения, и спасибо за чтение!

public ClassOne(ClassTwo twoObject){

}

public boolean OneMethod(){
    twoObject.MethodName(); // twoObject cannot be resolved.
}

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

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

public class classOne{

    Classtwo object;
    public ClassOne(ClassTwo twoObject){
        object = twoObject;
    }

    public boolean OneMethod(){
        object.MethodName(); 
    }
}

Надеюсь, он вам поможет:)

2 голосов
/ 03 апреля 2012

Вам необходимо сохранить ссылку на twoObject локально в экземпляре этого класса, чтобы получить доступ к нему вне области конструктора.Прямо сейчас конструктор выполняется с переданным элементом, ничего не делает, и экземпляр twoObject исчезает из этого класса для всех практических целей.

0 голосов
/ 03 апреля 2012

Код неверен, так как «twoObject» не находится в области действия, когда вызывается его метод «MethodName». Он находится в области видимости, если используется в конструкторе, но не находится в области видимости в методе «OneMethod». Чтобы использовать его, вы можете создать переменную класса и присвоить ее «twoOject» в конструкторе. Затем вы можете использовать его во всем классе.

public ClassOne { 

    private ClassTwo twoObject;  // instance variable

       public ClassOne(ClassTwo twoObject){ 
           this.twoObject=twoObject;
      }

       public boolean OneMethod(){ 
        twoObject.MethodName(); // twoObject is now a class memeber and hence in scope and hence will be resolved 
        return true; //could also be false, just adding a return statement as the return type is boolean
       }

    }
...