- •Основы Java
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Обобщения
- •ООП в Java. Обобщения
- •ООП в Java. Обобщения. Ограниченные типы
- •ООП в Java. Обобщения. Ограниченные типы
- •ООП в Java. Обобщения. Шаблон аргумента.
- •ООП в Java. Обобщения. Шаблон аргумента.
- •ООП в Java. Обобщения. Ограниченный шаблон аргумента.
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные конструкторы
- •ООП в Java. Обобщения. Обобщенные конструкторы
- •ООП в Java. Некоторые примеры использования обобщений
- •ООП в Java. Обобщения. Обобщенные интерфейсы
- •ООП в Java. Обобщения. Обобщенные интерфейсы
- •ООП в Java. Автоматическое определение аргументов типа
- •ООП в Java. Обобщения. Очистка
- •ООП в Java. Ограничения в использовании обобщений
- •ООП в Java. Ограничения в использовании обобщений
- •GUI в Java
- •GUI в Java. AWT
- •GUI в Java. SWING
- •GUI в Java. JavaFX
- •GUI в Java. Создание простого GUI в SWING
- •GUI в Java. Создание простого GUI в SWING
- •GUI в Java. Менеджеры компоновки в SWING
- •GUI в Java. Панели фрейма
- •GUI в Java. Создание фрейма (окна) приложения
- •GUI в Java. Создание фрейма (окна) приложения Лекция 5
- •GUI в Java. Создание компонента для публикации «Hallo Java»
- •GUI в Java. Размещение компонента во фрейме
- •GUI в Java. Размещение нескольких компонетов
- •GUI в Java. Рисование двумерных форм. Библиотека Java 2D
- •GUI в Java. Рисование двумерных форм. Библиотека Java 2D
- •GUI в Java. Работа со шрифтом и цветом
- •GUI в Java. Абсолютное позиционирование
- •GUI в Java. Абсолютное позиционирование
- •GUI в Java. Абсолютное позиционирование
- •GUI в Java. Абсолютное позиционирование
ООП в Java. Обобщения. Ограниченные типы |
Лекция 5 |
Вызов метода getSumm в обобщенном классе InClass
public static void main(String args[]) {
Integer t[] = { 3, 4, 5, 2, 1, 7, -3, -2, 19}; Float f[] = { 3.09F, 4.67F, 5.89F};
//Простые типы: int, float и т.д. //в обобщениях использовать нельзя
InClass <Integer> getI = new InClass(t);
System.out.println(getI.getSumm());
//Вернет 36.0
InClass <Float> getF = new InClass(f);
System.out.println(getF.getSumm()); //Вернет 13.649999856948853
}
ООП в Java. Обобщения. Шаблон аргумента. |
Лекция 5 |
Поскольку методы могут принимать в качестве аргументов объекты классов, возникает вопрос — «Что делать, если в метод передается объект обобщенного класса?». Для этого применяется конструкция «шаблон аргумента».
//Метод возвращает максимальный элемент из двух массивов
//аргументом метода является объект обобщенного класса public Double getMax(InClass<?> ic) {
Double s = Mass[0].doubleValue();
Number[] temp = ic.getMass();
for(int i=1; i<Mass.length; i++) { if( s < Mass[i].doubleValue() ) {
s = Mass[i].doubleValue();
}
}
for(int j=0; j<temp.length; j++) { if( s < temp[j].doubleValue() ) {
s = temp[j].doubleValue();
}
}
return s;
}
ООП в Java. Обобщения. Шаблон аргумента. |
Лекция 5 |
Выполнение программы с шаблоном аргумента.
public static void main(String args[]) {
Integer t[] = { 3, 4000, 5, 2, 1, 7, -3, -2, 19};
Float f[] = { 300.09F, 4.67F, 25.89F};
InClass <Integer> getI = new InClass(t); InClass <Float> getF = new InClass(f);
System.out.println(getI.getMax(getF)); //Вернет 4000 //В метод getMax передается объект getF обобщенного //класса InClass
}
ООП в Java. Обобщения. Ограниченный шаблон аргумента. |
Лекция 5 |
Типы в шаблоне аргумента можно также ограничивать, задавая конкретный тип, Классу и подклассам которого должет соответствовать тип, подставляемый в шаблон аргумента.
//Метод будет работать только с объектом обобщенного Класса Number и его подклассами
public Double getMax(InClass<? Extends Number> ic) {
...
}
Можно использовать для ограничения и пользовательские классы
class A{}
class B extends A{} class D{}
class C<T> { T obj;
C(T obj) { this.obj = obj; }
public void test(C<? extends A> obj) { ... }
}
A a = new A(); B b = new B(); D d = new D();
C<A> c1 = new C<A>(a); C<B> c2 = new C<B>(b); C<D> c3 = new C<D>(d); c1.test(c1); c1.test(c2); c2.test(c1); c2.test(c2);
//Будет ошибка
//c3.test(c3); c1.test(c3); c2.test(c3);
ООП в Java. Обобщения. Обобщенные методы |
Лекция 5 |
Методы также могут иметь обобщенную форму. Обобщенные методы могут быть определены как в обобщенных, так и в обычных классах.
Объявление обобщенного метода имеет следующий порядок:
1.Сначала (после модификаторов) приводится описание обобщенного типа
2.Затем тип возвращаемый методом
3.Затем имя метода
4.Затем аргументы обобщенные и обычные
public class noGeneric {
//Метод возвращает сумму массива
static <T extends Number> Double massSumm(T[] mass) {
Double summ = 0D; for(T temp: mass) {
summ += temp.doubleValue();
}
return summ;
}
}
ООП в Java. Обобщения. Обобщенные методы |
Лекция 5 |
Выполнение обобщенного метода
public static void main(String args[]) {
Integer t[] = { 300, 467, 25 };
Float f[] = { 300F, 467F, 25F };
//noGeneric gn = new noGeneric(); System.out.println(noGeneric.massSumm(t)); //Вернет 792.0 System.out.println(noGeneric.massSumm(f));
//Вернет 792.0
}
ООП в Java. Обобщения. Обобщенные методы |
Лекция 5 |
Методы могут иметь несколько обобщенных аргументов
//Метод возвращает true, если сумма элементов массива T
//больше суммы элементов массива V static <T extends Number, V extends T>
boolean massMoreSumm(T[] mass_1, V[] mass_2) {
Double summ_1 = 0D;
Double summ_2 = 0D;
for(T temp: mass_1) {
summ_1 += temp.doubleValue();
}
for(T temp: mass_2) {
summ_2 += temp.doubleValue();
}
if( summ_1 > summ_2 ) return true; return false;
}
ООП в Java. Обобщения. Обобщенные методы |
Лекция 5 |
Выполнение обобщенного метода с несколькими обобщенными аргументами
public static void main(String args[]) {
Integer t[] = { 301, 467, 25 };
Float f[] = { 300F, 467F, 25F };
//noGeneric gn = new noGeneric(); System.out.println(noGeneric.massMoreSumm(t, f)); //Вернет true
}
ООП в Java. Обобщения. Обобщенные конструкторы |
Лекция 5 |
Конструкторы также могут иметь обобщенную форму. Обобщенные конструкторы могут быть определены как в обобщенных, так и в обычных классах.
Объявление обобщенного конструктора имеет следующий порядок:
1.Сначала приводится описание обобщенного типа
2.Затем имя конструктора
3.Затем аргументы обобщенные и обычные
public class TSumm { private Double summ;
<T extends Float> TSumm(T[] mass) { System.out.println("Вещественное одинарной точности"); this.summ = this.checkSumm(mass);
}
<T extends Integer> TSumm(T[] mass) { System.out.println("Целое"); this.summ = this.checkSumm(mass);
}
private <T extends Number> Double checkSumm(T[] mass) { Double summ = 0D;
for(T temp: mass) {
summ += temp.doubleValue();
}
return summ;
}
public Double getSumm() { return this.summ;
}
}
ООП в Java. Обобщения. Обобщенные конструкторы |
Лекция 5 |
Использование обобщенного конструктора
public static void main(String args[]) {
Integer t[] = { 301, 467, 25 };
Float f[] = { 300F, 467F, 25F };
TSumm gn1 = new TSumm(t); //Целое
System.out.println(gn1.getSumm()); //Вернет 793.0
TSumm gn2 = new Tsumm(f);
//Вернет Вещественное одинарной точности System.out.println(gn2.getSumm()); //Вернет 792.0
}