У меня есть класс Java B с внутренним классом C. Некоторые методы B принимают экземпляр C как параметра, но я хочу только принять экземпляры C, созданные соответствующим экземпляром B. Есть ли способ выполнить эту проверку во время компиляции?Проверка экземпляров внутренних классов
Пример
C c1 = new C();
B foo = c1.getB(); // foo was created by instance c1
C c2 = new C();
c2.method(foo); // I want a compiler error here.
Мой случай
Иметь имена классов Карта, которые удерживают матрицу экземпляров внутреннего MapArea класса. Самое приятное в этой схеме заключается в том, что я могу проверять поля xPos и yPos в конструкторе, поэтому не создаются недопустимые области для данной карты. Карта как метод distanceFrom (MapArea startPos, MapArea toLocation, MapArea ... otherLocations), и я пытался избежать повторной проверки аргументов области карты.
C c1 = новый C(); B foo = c1.getB() C c2 = новый C(); c2.method (foo) // Я хочу ошибку компилятора здесь. –
Итак, вы говорите о наличии нескольких внешних (B) объектов, каждый из которых может создавать несколько внутренних (C) объектов, но некоторые методы объекта C должны принимать только B, из которого они были созданы? Я не вижу, как вы это сделаете во время компиляции. Вы говорите больше о иерархии времени исполнения. Единственный способ, которым я могу видеть, что вы можете это сделать, - пометить каждый C своим родителем (B, который его создал), а затем как-то проверить его во время выполнения с помощью assert. Возможно, компилятор вам не поможет. – Andrew
Глядя на ваш пример: короткий ответ, нет. Компилятор не может проверить, как вы хотите. – Andrew