Pau*_*ier 167
通常,包装类是"包装"或"封装"另一个类或组件的功能的任何类.通过提供底层类或组件的实现的抽象级别,这些是有用的; 例如,包装COM组件的包装类可以管理调用COM组件的过程,而无需用它来打扰调用代码.它们还可以通过减少所涉及的接口点数来简化底层对象的使用; 通常,这可以更安全地使用底层组件.
小智 40
包装类提供了一种将基本类型用作对象的方法.对于每个原语,我们有一个包装类,如,
int Integer
byte Byte
Run Code Online (Sandbox Code Playgroud)
Integer和Byte是原始int和byte的包装类.当您需要将基元用作对象时,有时间/限制因此包装类提供称为装箱/拆箱的机制.
以下示例可以很好地理解概念
double d = 135.0 d;
Double doubleWrapper = new Double(d);
int integerValue = doubleWrapper.intValue();
byte byteValue = doubleWrapper.byteValue();
string stringValue = doubleWrapper.stringValue();
Run Code Online (Sandbox Code Playgroud)
所以这就是方法,我们也可以使用包装类类型转换成其他原始类型.当您需要将基本类型转换为对象并使用它们来获取其他基元时,将使用这种类型的转换.尽管如此,您还需要编写一个大代码.然而,使用简单的铸造技术可以实现相同的目的,因为可以如下实现代码片段
double d = 135.0;
int integerValue = (int) d ;
Run Code Online (Sandbox Code Playgroud)
虽然double值显式转换为整数值,也称为向下转换.
ral*_*nja 17
包装类不一定需要包装另一个类.它可能是一个API类包装功能,例如dll文件.
例如,创建一个dll包装器类可能非常有用,它负责所有的dll初始化和清理,并创建包装从例如创建的函数指针的类方法GetProcAddress()
.
干杯!
值得注意的是,在某些环境中,包装类可能做的大部分内容都被方面所取代.
编辑:
一般来说,包装器会扩展包装器所做的事情,而不用担心包装器的实现,否则没有必要包装而不是扩展包装类.一个典型的例子是在一些其他服务接口周围添加定时信息或记录功能,而不是将其添加到该接口的每个实现.
这最终成为Aspect编程的典型示例.您可以在方面编程中定义切入点,这是方法的一种正则表达式,然后声明要在所有方法匹配之前,之后或周围执行的方法,而不是按功能遍历接口函数并添加样板记录.切入点.可以公平地说,方面编程是Decorator模式的一种使用,也可以使用包装类,但这两种技术都有其他用途.
包装类通常是一个将对象作为私有属性的类.包装器实现了私有对象的API,因此它可以作为私有对象所在的参数传递.
假设你有一个集合,并且你希望在添加对象时使用某种翻译 - 你编写一个包含所有集合方法的包装类.当调用add()时,包装器会转换参数,而不是仅将它们传递给私有集合.
包装器可以在任何可以使用集合的地方使用,私有对象仍然可以有其他对象引用它并读取它.