Статьи
Утилиты Telegram YouTube Отзывы

Статьи с тэгом «ООП»

Java: Pattern matching в switch

17 ноября 2023

Тэги: Java, руководство, ООП.

В Java 21 наряду с SequencedCollection (см. SequencedCollection и SequencedSet в Java и SequencedMap в Java) из статуса preview в статус production-ready перешла ещё одна фича – шаблоны сравнения (pattern matching) для конструкции switch. Рассмотрим возможности этой конструкции на конкретных примерах.

Простой пример

Предположим, что мы пишем метод displayScale(), в котором надо определить количество знаков после запятой в переданном нам числе. Причём это число поступает на вход как самый базовый тип Object. Напомню, что базовым для всех чисел является класс Number. Его производными типами являются, например, целые числа Integer и числа с произвольной точностью BigDecimal.

Иерархия числовых классов в Java
Читать полностью...

SequencedMap в Java

8 ноября 2023

Тэги: Java, Collections, ООП.

В статье SequencedCollection и SequencedSet в Java мы рассмотрели интерфейс SequencedCollection, который появился в Java 21. Также узнали про его более частный случай – интерфейс SequencedSet.

Теперь перейдём к интерфейсу SequencedMap, который обладает сходным функционалом, но не входит напрямую в иерархию SequencedCollection.

interface SequencedMap<K, V> extends Map<K, V> {
    SequencedMap<K, V> reversed();
    Map.Entry<K,V> firstEntry();
    Map.Entry<K,V> lastEntry();
    Map.Entry<K,V> pollFirstEntry();
    Map.Entry<K,V> pollLastEntry();
    V putFirst(K k, V v);
    V putLast(K k, V v);
    SequencedSet<K> sequencedKeySet();
    SequencedCollection<V> sequencedValues();
    SequencedSet<Map.Entry<K, V>> sequencedEntrySet();
}
Читать полностью...

SequencedCollection и SequencedSet в Java

3 ноября 2023

Тэги: Java, Collections, алгоритмы, ООП.

SequencedCollection

В Java 21 появилась новая группа интерфейсов коллекций, самым основным из которых является SequencedCollection. Он расширяет базовый интерфейс Collection, добавляя в него ряд полезных методов для манипуляций с первым и последним элементами, а также для инвертирования коллекции:

interface SequencedCollection<E> extends Collection<E> {
    void addFirst(E e);
    void addLast(E e);
    E getFirst();
    E getLast();
    E removeFirst();
    E removeLast();
    SequencedCollection<E> reversed();
}

Две основных реализации интерфейса List (ArrayList и LinkedList) также поддерживают этот интерфейс.

Иерархия интерфейсов и классов SequencedCollection
Читать полностью...

Контракт интерфейса Comparable

6 мая 2023

Тэги: Collections, Java, руководство, ООП.

В языке программирования Java есть механизм сравнения объектов, который основан на интерфейсе Comparable и методе compareTo(). Этот механизм позволяет определить порядок сортировки объектов и использовать их в коллекциях, которые требуют сравнения элементов.

Контракт метода compareTo()

Интерфейс Comparable определяет единственный метод compareTo(), который сравнивает текущий объект с переданным в аргументе.

Контракт метода compareTo() состоит из трех основных правил:

  1. Если текущий объект меньше объекта, с которым он сравнивается, то метод должен возвращать отрицательное число.
  2. Если текущий объект больше объекта, с которым он сравнивается, то метод должен возвращать положительное число.
  3. Если текущий объект равен объекту, с которым он сравнивается, то метод должен возвращать ноль.
Читать полностью...

Пример standalone-приложения на Spring

14 января 2018

Тэги: Java, maven, Spring, ООП, Java 8, Stream API.

Рассмотрим базовые возможности dependency injection (внедрения зависимостей), которые открывает нам Spring.

Создадим обычный maven-проект, где в pom.xml добавим сам Spring (артефакт spring-context) и секцию build со стандартным плагином maven-compiler-plugin, в котором указываем версию java в source и target.

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.13.RELEASE</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

Теперь создадим главный класс TestApp, который будет точкой запуска приложения.

Читать полностью...

Передача null в перегруженный метод

4 января 2018

Тэги: ООП, Java, головоломки.

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

interface MyInterface {
    void doWork();
}

class MyBaseObject implements MyInterface {
    @Override
    public void doWork() {
        System.out.println("Base");
    }
}

class MyChildObject extends MyBaseObject {
    @Override
    public void doWork() {
        System.out.println("Child");
    }
}
Читать полностью...