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;
}
Я не хочу (или говорю, что не могу) использовать какой-либо параметр типа для вызова этого метода.
Что за предупреждение?
Какая польза от этого метода? Почему вы используете дженерики с одной стороны, а затем делаете это отображение Object-Object, отбрасывая всю безопасность типов?
@ luk2302 На самом деле я не могу найти общий способ определения метода форматирования.




Сделайте статический метод также универсальным:
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);
}
Я пробовал это и должен принимать параметры типа при вызове метода. Но я не хочу (или говорю, что не могу) использовать какой-либо параметр типа при вызове этого метода. Я добавляю код вызова после своего вопроса.
Почтовый индекс в виде текста, а не изображения.