Какие типы данных в Java могут хранить только положительные значения?

«Какие типы данных в Java могут хранить только положительные значения?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java нет встроенных примитивных типов, которые строго ограничивают значения только положительными числами. Однако некоторые типы имеют естественные ограничения:

1. Беззнаковый char

  • 16-битный беззнаковый целочисленный тип
  • Диапазон: 0 до 65,535
    char positiveChar = 40000; // Корректно
    // char negativeChar = -1; // Ошибка компиляции

2. Типы с ручной валидацией Для byte, short, int, long требуется явная проверка:

Вариант A: Класс-обёртка

public final class PositiveInteger {
    private final int value;

    public PositiveInteger(int value) {
        if (value < 0) {
            throw new IllegalArgumentException("Value must be positive: " + value);
        }
        this.value = value;
    }

    public int getValue() { return value; }
}

Вариант B: Библиотечные проверки

// Apache Commons Lang
Validate.isTrue(value >= 0, "Value must be non-negative");

// Java 9+ Objects
this.value = Objects.checkIndex(value, Integer.MAX_VALUE);

3. Специализированные библиотеки

  • JSR 305/308 аннотации @NonNegative
  • Apache Commons Math: NaturalNumber и подобные

Важно: Для строгой гарантии положительности всегда используйте проверки в конструкторах и сеттерах.