Как избежать общего предупреждения

public abstract class Formatter<P, R> {

    public static Object format(Object src, Class<? extends Formatter> formatter) {

        Formatter fmt;
        try {
            fmt = formatter.newInstance();
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }

        return fmt.format(src);  // Unchecked call warning here
    }

    public abstract R format(P src);

}

Как избежать общего предупреждения при вызове

fmt.format(src)

Средство форматирования является подклассом средства форматирования, определенным как

PhoneFormatter extends Formatter<String, String>

Это код вызова

if (annotation instanceof LogFormat) {
    LogFormat logFormat = (LogFormat) annotation;
    arg = Formatter.format(arg, logFormat.formatter());
}

-

public class User {

    @LogFormat(formatter = PhoneNumberFormatter.class)
    private String mobile;
}

Я не хочу (или говорю, что не могу) использовать какой-либо параметр типа для вызова этого метода.

Почтовый индекс в виде текста, а не изображения.

luk2302 17.09.2018 10:54

Что за предупреждение?

ernest_k 17.09.2018 10:54

Какая польза от этого метода? Почему вы используете дженерики с одной стороны, а затем делаете это отображение Object-Object, отбрасывая всю безопасность типов?

luk2302 17.09.2018 10:55

@ luk2302 На самом деле я не могу найти общий способ определения метода форматирования.

midpush 18.09.2018 11:06
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
4
81
1

Ответы 1

Сделайте статический метод также универсальным:

abstract class Formatter <P, R> {
    static <P, R> R format(P src, Class<? extends Formatter <P, R>> formatter) {
        Formatter <P, R> fmt;
        try {
            fmt = formatter.newInstance();
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }
        return fmt.format(src);
    }

    abstract R format(P r);
}

Я пробовал это и должен принимать параметры типа при вызове метода. Но я не хочу (или говорю, что не могу) использовать какой-либо параметр типа при вызове этого метода. Я добавляю код вызова после своего вопроса.

midpush 18.09.2018 11:02

Другие вопросы по теме