Java Q&A



Статические классы - часть 2


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

Компонентный класс- единственный, который может быть объявлен статическим. Когда вы объявляете компонентный класс, вы можете создать его только внутри содержимого объекта внешнего класса, по отношению к которому объявлен компонетный класс. Если вы хотите обойти это ограничение, вам необходимо объявить комопонентный класс как статический.

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

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

Если ваш главный класс содержит несколько меньших вспомогательных классов, которые могут быть использованы вне класса и имеют смысл только внутри главного класса, стоит сделать их вложенными классами верхнего уровня. Для использования вложенных классов используйте: КлассВерхнегоУровня.ВложенныйКласс.

Посмотрите на следующий пример:

public class Filter { Vector criteria = new Vector(); public addCriterion(Criterion c) { criteria.addElement(c); } public boolean isTrue(Record rec) { for(Enumeration e=criteria.elements(); e.hasMoreElements();) { if(! ((Criterion)e.nextElement()).isTrue(rec)) return false; } return true; }

public static class Criterion { String colName, colValue; public Criterion(Stirng name, String val) { colName = name; colValue = val; } public boolean isTrue(Record rec) { String data = rec.getData(colName); if(data.equals(colValue)) return true; return false; } } }

И когда вы хотите его использовать:

Filter f = new Filter(); f.addCriterion(new Filter.Criterion("SYMBOL", "SUNW")); f.addCriterion(new Filter.Criterion("SIDE", "BUY")); ..... if(f.isTrue(someRec)) //do some thing .....

Одно важное замечание: ключевое слово static не делает с заголовком класса тоже, что с заголовком пременной или метода.




Содержание  Назад