Определите ограничения на контекст, в котором создается экземпляр класса - PullRequest
1 голос
/ 03 декабря 2009

Интересно, есть ли способ определить класс таким образом, чтобы его экземпляры никогда не были членами другого класса (только локальные переменные), или наоборот - только членами, но никогда не локальными.

Есть ли способ, которым класс может диктовать область действия своих предполагаемых экземпляров?

Ответы [ 3 ]

2 голосов
/ 03 декабря 2009

Я так не думаю. Но у меня нет окончательных доказательств.

1 голос
/ 03 декабря 2009

нет. член и локальная переменная могут быть назначены друг другу.

1 голос
/ 03 декабря 2009

Чтобы ограничить область видимости, вы должны использовать своего рода аннотацию класса или модификатор класса, а виртуальной машине нужна функциональность, чтобы проверить, был ли класс (или любой подкласс этого ограниченного класса) назначен члену или локальной переменной и нарушен ограничение.

Только представьте, у вас есть класс с - только что изобретенным - модификатором onlylocal, указывающим, что вы допускаете только экземпляры в локальных переменных.

public onlylocal class LocalUseOnlyClass implements Serializable {
  //...
}

и в другом классе кто-то только что сделал в конструкторе:

private Object member;
public MyOtherClass(Serializable something) {
  this.member = something
}

Компилятор не может обнаружить, если вы передали экземпляр LocalUseOnlyClass этому конструктору, поэтому JVM должна была проверить и выдать исключение или ошибку.

Кстати: каково ваше намерение? - может быть, есть альтернатива для выполнения вашего основного требования.

...