什么是包装器类? 这样的类有什么用处呢?
当前回答
让一个包装类变得健康并不是一件容易的事情。 了解包装器类是如何被其他人设计的也不是一件容易的事情。 因为这是想法,不是代码。 只有理解了理念,才能理解包装。
其他回答
有几种设计模式可以称为包装器类。
请参阅我对“代理、装饰器、适配器和桥接模式有何不同?”
值得注意的是,在某些环境中,包装器类所做的大部分工作都被方面所取代。
编辑:
一般来说,包装器将对包装所做的事情进行扩展,而不关心包装的实现,否则,包装与扩展被包装的类没有任何意义。一个典型的例子是围绕一些其他服务接口添加计时信息或日志功能,而不是将其添加到该接口的每个实现中。
This then ends up being a typical example for Aspect programming. Rather than going through an interface function by function and adding boilerplate logging, in aspect programming you define a pointcut, which is a kind of regular expression for methods, and then declare methods that you want to have executed before, after or around all methods matching the pointcut. Its probably fair to say that aspect programming is a kind of use of the Decorator pattern, which wrapper classes can also be used for, but that both technologies have other uses.
让一个包装类变得健康并不是一件容易的事情。 了解包装器类是如何被其他人设计的也不是一件容易的事情。 因为这是想法,不是代码。 只有理解了理念,才能理解包装。
包装器类通常是一个具有对象作为私有属性的类。包装器实现了私有对象的API,所以它可以作为私有对象的参数传递。
假设您有一个集合,并且希望在向其中添加对象时使用某种转换—您编写一个具有集合的所有方法的包装器类。当调用add()时,包装器转换参数,而不是仅仅将它们传递到私有集合中。
包装器可以在任何可以使用集合的地方使用,私有对象仍然可以有其他对象引用它并读取它。
包装器类的出现是为了满足程序员的基本需求——即在只允许使用object的地方使用原始值。顾名思义,包装器类包装一个基本值,并将该值保存在Object中。因此,在所有不允许使用原语的地方——比如泛型、hashmap-key、数组列表等——程序员现在可以选择提供这些原语值作为相应的包装器类型。
此外,这些包装器类型有许多实用工具方法,用于从基本类型转换到相应的包装器类型和返回,以及从字符串转换到包装器类型和返回。
我在我的博客上写了一篇关于包装器类的详细文章,深入解释了包装器类型的概念——http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples/ (披露-这个博客是我所有的)