Я хочу передать анонимный тип аннотации. Поскольку я не знаю, как правильно объяснить мою проблему словами, я просто объясню свое намерение и свой код.
В настоящее время я пишу сериализатор / десериализатор для Java в JSON. Каждый класс должен затем реализовать определенный c интерфейс для сериализации, и каждое поле также нуждается в аннотации, так что мой сериализатор знает, какие поля для сериализации.
@Retention(RetentionPolicy.RUNTIME)
@Target(FIELD)
public @interface SerializeField {
Class<? extends Formatter> formatter();
}
Теперь я добавил возможность указать форматер, который генерирует строку для поля.
public interface Formatter<T> {
public abstract String format(T object);
}
Это прекрасно работает, когда я просто создаю новый класс, который реализует Formatter, но не работает, когда я создаю анонимный класс или использую лямбда-выражение.
public class Test implements Javonable {
//This does not work
Formatter<BigDecimal> bigDecimalFormatter = (BigDecimal object) -> object.toString();
@SerializeField(formatter = bigDecimalFormatter.getClass())
private BigDecimal bigDecimal; // ^ The value for annotation attribute SerializeField.formatter must be a class literal
//This does work
@SerializeField(formatter = BigIntegerFormatter.class)
private BigInteger bigInteger;
public class BigIntegerFormatter implements Formatter<BigInteger> {
@Override
public String format(BigInteger object) {
return object.toString();
}
}
}
Есть ли что-то что я не вижу или есть решение для этого? В конце концов я просто хочу иметь возможность передавать Formatter как можно проще, без необходимости каждый раз создавать новый класс.