2012-04-29 2 views
4

Можно создать дубликат:
Java private field accessJava - доступ частных переменных

Я просто наблюдал немного странно (IMHO) вещь в Java:

class foo{ 
    private int secret; 
    public int getSecret(){ 
     return secret; 
    } 
    public void confuseCoder(foo o){ 
     System.out.println(o.secret); 
    } 
} 

Тот же вопрос был там (Java private field access possible when having a reference?), но я не уверен, смогу ли я жить с этим чувством, что когда-нибудь, где-нибудь я получу доступ к wron г переменной, и это разрушит мир или что-то в этом роде.

Есть ли способ ограничить доступ к закрытым переменным на уровне класса?

Спасибо, Войтех

+5

^^ Нет, на самом деле, это ответ. Вы должны будете жить со своими чувствами. –

+1

Нет, нет способа. –

+0

У вас есть «ограничение доступа к закрытым переменным на уровне класса». Я подозреваю, что вы хотите ограничить доступ к экземпляру. –

ответ

1

когда-нибудь, где-то я получить доступ к неправильно переменной, и это разрушит мир или что-то

Это называется быть человеком, так как Java не имеет никакого способа избежать этой ошибки компилятор обыкновение поймать его для вас. Правильный способ избежать разрушающих мир ошибок - это написать тесты и использовать другие формы управления качеством.

Хотя я думаю, что опытный Java-программист мог написать плагин обработчика аннотации/компилятора для обозначения переменных как экземпляра private, в настоящее время я не знаю реализаций.

4

Если вы обеспокоены мутирует данные, которые вы всегда можете использовать final. Он даже может быть публичным:

class Foo{ 
    public final int secret; 
    public int getSecret(){ 
     return secret; 
    } 
    public Foo(int s){ 
     secret=s; 
    } 

    public static void main (String args[]) 
    { 
    foo Foo=new Foo(1); 
    foo.secret=2;//Illegal 
    } 
} 
+2

Хотя я согласен с тем, что вы говорите, вопрос OP говорит о * доступе *, а не о мутации. –

0

private ключевого слова означает, что переменная не может быть доступна из любой точки мира, но класс принадлежит (http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html). Это означает, что вы легко ограничиваете доступ к нему, не предоставляя метод мутатора. Вы можете также объявить его как final, чтобы ограничить любую мутацию.

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