Рубрики
Без рубрики

Аннотации Java.

Люди, использующие Spring Framework на Java, знают, насколько круты аннотации, даже я удивился, когда я… Помеченный java, аннотации.

Люди, использующие Spring Framework на Java, знают, насколько классны аннотации, даже я был удивлен, когда впервые использовал аннотацию. Я не говорю, что только в spring есть аннотации, в самой Java много аннотаций, и они так хорошо работают и сокращают количество кодов.

Когда я начал определяться с написанием хотя бы одной аннотации, я думал, что аннотация сможет многое сделать без использования каких-либо дополнительных методов, на самом деле я ошибался.

Если вы хотите написать аннотацию, вам нужна одна аннотация и по крайней мере один метод для облегчения аннотации,

Следующий пример покажет, как легко вы можете создать аннотацию для отображения полей из ваших моделей, чтобы легко детоксифицировать, не имея установщиков или конструкторов.

Следующий пример покажет, как легко вы можете создать аннотацию для отображения полей из ваших моделей, чтобы легко детоксифицировать, не имея установщиков или конструкторов.

import java.lang.annotation.*;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FieldMapper {
    public String field();
}

Это аннотация, которую я написал для своего демонстрационного проекта, где она будет выполняться во время выполнения для полей, вы также можете попробовать другие цели и политики хранения, для моего требования мне нужно сохранение в качестве среды выполнения и цели в качестве поля.

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import in.saifali.mapper.annotations.FieldMapper;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

public class Processor {
    Gson gson = new Gson();
    Map dtoMap = new HashMap<>();
    Map objectMap = new HashMap<>();
    public  T map(Class t, Object object) {
        try {
            T returnClass = t.getDeclaredConstructor().newInstance();
            for (Field field : returnClass.getClass().getDeclaredFields()) {
                field.setAccessible(true);
                if (field.isAnnotationPresent(FieldMapper.class)) {
                    dtoMap.put(field.getName(), field.getAnnotation(FieldMapper.class).field());
                }else{
                    dtoMap.put(field.getName(), field.getName());
                }
            }
            objectMap = gson.fromJson(gson.toJson(object), new TypeToken>() {
            }.getType());
            dtoMap.forEach((x, y) -> dtoMap.put(x, objectMap.get(y)));
            String json = gson.toJson(dtoMap);
            return gson.fromJson(json, t);
        } catch (Exception e) {
            throw new IllegalArgumentException();
        }
    }

}

Поскольку хранение выполняется во время выполнения, я могу использовать API отражения Java и получать каждое поле с аннотацией @Fieldmapper и сопоставлять с соответствующими полями.

Из приведенного выше репозитория GitHub вы найдете тестовые примеры и поймете, как легко использовать приведенную выше аннотацию.

Примечание: Я не очень хорошо пишу.

Оригинал: “https://dev.to/saifali40/java-annotations-5gi5”