Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java反射初始化成员变量_Java_Reflection_Jsf - Fatal编程技术网

使用Java反射初始化成员变量

使用Java反射初始化成员变量,java,reflection,jsf,Java,Reflection,Jsf,我希望有人能指出一些有用的信息,这些信息与Java中使用反射的最佳实践有关 我支持的当前项目使用Oracle ADF Faces,我们发现,根据手头的目标,某些页面最终会有大量需要在备份bean中初始化的组件。团队中的一名开发人员设计了一个解决方案,使用bean构造函数中的反射来初始化特定页面的所有成员组件 有人担心,这可能会违反最佳实践,尽管这可能会为单个开发人员节省一些时间,但可能会影响应用程序的性能 有人以这种方式利用反射吗?这是可以接受的,还是开发人员应该手工编写代码 如果可能,应该避免

我希望有人能指出一些有用的信息,这些信息与Java中使用反射的最佳实践有关

我支持的当前项目使用Oracle ADF Faces,我们发现,根据手头的目标,某些页面最终会有大量需要在备份bean中初始化的组件。团队中的一名开发人员设计了一个解决方案,使用bean构造函数中的反射来初始化特定页面的所有成员组件

有人担心,这可能会违反最佳实践,尽管这可能会为单个开发人员节省一些时间,但可能会影响应用程序的性能


有人以这种方式利用反射吗?这是可以接受的,还是开发人员应该手工编写代码

如果可能,应该避免反射,因为您应该处理一些通常属于编译器能力的任务;此外,反射的使用使得重构更加困难,因为有些工具不能处理反射(想想eclipse的重构)

反射对性能有影响,但我认为这在可维护性方面是一个小问题


如果您有一个不使用反射的解决方案,请使用它。

在可能的情况下应避免反射,因为您应该处理一些通常属于编译器能力的任务;此外,反射的使用使得重构更加困难,因为有些工具不能处理反射(想想eclipse的重构)

反射对性能有影响,但我认为这在可维护性方面是一个小问题


如果您有一个不使用反射的解决方案,请使用它。

反射在web框架中无处不在。Struts2等面向操作的框架使用反射,使用请求中的参数初始化每个操作的属性。像Hibernate这样的JPA实现使用反射来初始化实体的属性。依赖注入系统(如Spring、Pico和Guice)使用反射来初始化各种对象的复杂依赖关系图


这些项目的成功证明了反射在这个应用程序中的可行性。

反射在web框架中无处不在。Struts2等面向操作的框架使用反射,使用请求中的参数初始化每个操作的属性。像Hibernate这样的JPA实现使用反射来初始化实体的属性。依赖注入系统(如Spring、Pico和Guice)使用反射来初始化各种对象的复杂依赖关系图


这些项目的成功表明了该应用程序中反射的可行性。

我通常选择使用Spring之类的框架进行显式初始化。过度使用反射会导致代码很难维护,或者至少很难阅读


尽管现代JVM的反射速度更快,但性能仍然会受到影响。

我通常选择使用Spring之类的框架进行显式初始化。过度使用反射会导致代码很难维护,或者至少很难阅读


尽管现代JVM的反射速度更快,但性能仍然会受到影响。

这取决于如何使用反射

对对象的公共API(例如在bean上使用)的反射非常有用,可以节省大量开发人员时间


针对对象私有字段的反射(或其他破坏封装的反射使用)会很快让您陷入麻烦…

这取决于您如何使用反射

对对象的公共API(例如在bean上使用)的反射非常有用,可以节省大量开发人员时间


对对象的私有字段进行反射(或使用其他破坏封装的反射)会很快让您陷入麻烦…

我认为您对反射的自然偏见是有充分理由的。我见过它被滥用,而且不好看

这样说,如果你的反射例程足够健壮,可以不知道成员变量的类型和成员变量的名称(也就是说,你不仅仅是在字符串中重写成员变量),所以重构类是安全的,那么我会考虑。


就性能而言,仅仅因为这个原因而拒绝反射可能是一种过早的优化,最好是进行基准测试,看看这是否是一个问题。

我认为您对反射的自然偏见是有充分理由的。我见过它被滥用,而且不好看

这样说,如果你的反射例程足够健壮,可以不知道成员变量的类型和成员变量的名称(也就是说,你不仅仅是在字符串中重写成员变量),所以重构类是安全的,那么我会考虑。


就性能而言,仅仅因为这个原因而拒绝反射可能是一种过早的优化,最好是进行基准测试,看看这是否是一个问题。

通常我会说同样的话,但他不是在谈论访问单个方法或变量;他说的是访问所有成员组件。这使得重构的论据有些毫无意义,我认为这些论据仍然成立。改变一个类型,瞧,什么都不起作用了,因为在反射中你用一个字符串来表示一个类型(例如);他说的是访问所有成员组件。这使得重构的论据有些毫无意义,我认为这些论据仍然成立。改变一个类型,瞧,什么都不起作用了,因为在反射中你用一个字符串来表示一个类型(例如)