2014-11-20 5 views
0

У меня проблема, которая выглядит просто, но я не могу понять это.Как получить доступ к объекту вне его метода

Вот упрощенная версия моей проблемы:

public void createContents() { 
    Composite dataCalcComposite = new Composite(shell, SWT.NONE); 
    dataCalcComposite.setBounds(0, 10, 279, 146); 
} 

public void repositionObjects() { 
    dataCalcComposite.setLocation(50, 10) 
} 

Это не будет работать, потому что repositonObjects не может видеть переменную dataCalcComposite.

Я знаю, что могу исправить это, вызвав repostionObjects внутри первого метода и передав переменную в качестве параметра, но это очень упрощенная версия моей проблемы, и количество объектов, которые необходимо переместить, будет меняться, поэтому Я не думаю, что этот метод будет работать.

Кроме того, я не могу использовать static для переменной, моя IDE говорит, что с ней будет работать только final.

Так что, не имея возможности использовать static для переменной, как я могу получить к ней доступ из другого метода?

ответ

1

Вы можете переместить объявление Composite dataCalcComposite; вне метода, поэтому эта переменная станет переменной экземпляра.

.... 
private Composite dataCalcComposite; 

public void createContents() { 
    dataCalcComposite = new Composite(shell, SWT.NONE); 
    dataCalcComposite.setBounds(0, 10, 279, 146); 
} 

public void repositionObjects() { 
    if (dataCalcComposite != null) { 
     dataCalcComposite.setLocation(50, 10) 
    } 
} 
.... 
+0

Он будет работать, он будет выглядеть немного небрежным, но он определенно решает мою проблему. –

+0

@MarkKramer Я отредактировал код, чтобы сделать его более безопасным и предотвратить исключение, если вы вызываете repositionObjects до вызова createContents. – Eran

Смежные вопросы