java注解 remote_【java】这样使用 注解 规范吗?

不知道你的 @MyAnnotation 用以修饰哪个类,我这里假设是 OriginClass 吧.

以我个人来说,我会使用 AimClass.from(originClassInstance);

其实就是把你的工具类融合到目标类里.

理由:

转换逻辑只有 AimClass 需要,转换逻辑的输出即 AimClass,那么只需要把转换逻辑封装到该类中即可.

转换逻辑中,可以硬编码或者也通过 @MyAnnotation 注解来处理.但是注意,这里的 @MyAnnotation 应该修饰的是 AimClass 上的字段.

由于 1、2,如果映射关系发生变化,调用者完全无感,因为他依旧可以传入一个干净的 OriginClassInstance.

如果想做到 AimClass 不依赖 OriginClass 也是可以的(不然就需要 remote 反过来依赖 OriginClass 所在的包了,虽然可以通过 provide 解决但是终究看着闹心):

public class AimClass {

@MyAnnotation(name = "origin_id", type = String.class)

private String id;

public static AimClass from(Object object) {

AimClass aim = new AimClass();

Class tClass = object.getClass();

// 如果有反射工具类的话则更方便,不想依赖的话则用原始写法就好.

// 这一段应该跟你原先的转换代码差不多. 我就不多解释了.

// 异常捕捉我也没写,需要的就自己加一下.

Arrays.stream(

// 如果不支持 stream 那就换成 for 循环.

AimClass.class.getDeclaredFields()

)

.filter(f -> f.isAnnotationPresent(MyAnnotation.class))

.forEach(f -> {

f.setAccessible(true);

MyAnnotation myAnnotation = f.getAnnotation(MyAnnotation.class);

Field tField = tClass.getDeclaredField(myAnnotation.name());

tFiled.setAccessible(true);

f.set(aim, myAnnotation.type().cast(tField.get(object)));

})

return aim;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值