在Java中使用反射的最简洁的方式

Java中的反射确实让人感到尴尬。java.lang.reflect API非常强大和完整,从这个意义上讲也很冗长。与大多数脚本语言不同,没有方便的方法使用反射来动态访问方法和字段。方便的意思是这样的
// PHP
$method = ‘my_method’;
$field = ‘my_field’;

// Dynamically call a method
o b j e c t − > object-> object>method();

// Dynamically access a field
o b j e c t − > object-> object>field;
甚至更好
// JavaScript
var method = ‘my_method’;
var field = ‘my_field’;

// Dynamically call a function
objectmethod;

// Dynamically access a field
object[field];
对于Java员工来说,这是他们只能梦想的事情。他们会写这个
String method = “my_method”;
String field = “my_field”;

// Dynamically call a method
object.getClass().getMethod(method).invoke(object);

// Dynamically access a field
object.getClass().getField(field).get(object);
显然,这并不能解决NullPointerExceptions,InvocationTargetExceptions,IllegalAccessExceptions,IllegalArgumentExceptions,SecurityExceptions,原始类型等问题。在企业环境中,事情必须是安全的,并且Java架构师已经考虑了可能发生的所有可能出现的问题。使用反射时。但是在很多情况下,我们知道我们在做什么,我们并不关心大多数这些功能。我们希望使用不太冗长的方法。
这就是为什么我在jOO *系列中创建了另一个同级产品:jOOR(Java面向对象的反射)。虽然这不是一个杀手lib的库,但对于寻求简单,流利的解决方案的1-2位开发人员而言,它可能很有用。这是我最近在堆栈溢出时遇到的一个示例,其中jOOR可能恰好适合:
// Classic example of reflection usage
try {
Method m1 = department.getClass().getMethod(“getEmployees”);
Employee employees = (Employee[]) m1.invoke(department);

for (Employee employee : employees) {
Method m2 = employee.getClass().getMethod(“getAddress”);
Address address = (Address) m2.invoke(employee);

Method m3 = address.getClass().getMethod("getStreet");
Street street = (Street) m3.invoke(address);

System.out.println(street);

}
}

// There are many checked exceptions that you are likely to ignore anyway
catch (Exception ignore) {

// … or maybe just wrap in your preferred runtime exception:
throw new RuntimeException(e);
}
和使用jOOR的相同示例:
Employee[] employees = on(department).call(“getEmployees”).get();

for (Employee employee : employees) {
Street street = on(employee).call(“getAddress”).call(“getStreet”).get();
System.out.println(street);
}

最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值