什么是包装类?

什么是包装类?
这些类如何有用?

通常,包装类是“包装”或“封装”其他类或组件的function的任何类。 通过提供实现基础类或组件的抽象级别,这些是有用的。 例如,包装COM组件的包装类可以pipe理调用COM组件的过程,而不用打扰调用代码。 他们还可以通过减less涉及的接口点数来简化对基础对象的使用。 这经常会使得底层组件的使用更安全。

听起来像这样:一个类将另一个类或API的function“包装”到一个更简单或仅仅是不同的API中。

请参阅: 适配器模式 , 外观模式

包装类提供了一种将基元types用作对象的方法。 对于每个基元,我们有一个包装类,

int Integer byte Byte 

Integer和Byte是原始int和字节的包装类。 当需要使用基元作为对象时,有时间/限制,所以包装类提供了一种称为装箱/拆箱的机制。

以下例子可以很好地理解概念

 double d = 135.0 d; Double doubleWrapper = new Double(d); int integerValue = doubleWrapper.intValue(); byte byteValue = doubleWrapper.byteValue(); string stringValue = doubleWrapper.stringValue(); 

所以这就是我们可以使用包装类types转换为其他原始types。 当你需要将一个原始types转换为对象并使用它们来获取其他原语时,就使用了这种types的转换。尽pipe这种方法需要编写一个大的代码。 但是,使用简单的铸造技术也可以达到同样的效果,因为代码片段可以实现如下

 double d = 135.0; int integerValue = (int) d ; 

虽然double值明确地转换为整数值,也称为向下转换。

包装类不一定需要包装另一个类。 它可能是一个API类包装function,例如在一个DLL文件。

例如,创build一个dll包装类可能是非常有用的,它包括所有的dll初始化和清理,并创build包装从例如GetProcAddress()创build的函数指针的类方法,

干杯!

包装类是一个类似于其他名称的“包装”类。

它的更正式的定义将是一个实现适配器模式的类 。 这使您可以将一组API更改为更易于阅读的forms。 例如,在C#中,如果您想使用本机Windows API,则可以将其包装到符合.NETdevise准则的类中。

有几种devise模式可以被称为包装类。

请参阅我的答案:“ 代理,装饰器,适配器和桥接器模式如何不同?

注意到在某些环境中,包装类可能做的很多事情正在被方面取代。

编辑:

一般来说,一个包装器会扩展wrappee的function,而不用担心wrappee的实现,否则就没有必要包装和扩展包装类了。 一个典型的例子是添加时间信息或日志loggingfunction,而不是将其添加到该接口的每个实现中。

这最终成为Aspect编程的典型例子。 在方面编程中,您不需要通过函数来​​查看接口函数并添加样板日志logging,而是在方法编程中定义一个切入点,这是一种方法的正则expression式,然后声明您希望在所有方法匹配之前,之后或周围执行的方法切入点。 它可能是公平的说,方面编程是一种使用装饰者模式,也可以使用包装类,但这两种技术有其他用途。

包装类是一个类包装另一个类,并提供客户端和被包装的原始类之间的抽象。

包装类通常是一个具有对象作为私人财产的类。 包装器实现了这个私有对象的API,所以它可以作为一个parameter passing给私有对象。

假设你有一个集合,并且当你添加对象的时候你想要使用某种翻译 – 你写了一个包含所有集合的方法的包装类。 当调用add()时,包装器将转换参数,而不是将它们传递到私有集合中。

包装器可以在任何地方使用,也可以使用集合,私有对象仍然可以有其他对象引用它并读取它。

包装类是一个用来包装另一个类的类,在客户端和被包装的原始类之间添加一个间接和抽象层。

包装类是基本数据types的包装。 它在相应的类实例中表示原始数据types,例如布尔型数据types可以表示为布尔类实例。 Java中的所有基本包装类都是不可变的,即一旦赋值给包装类实例就不能再进一步改变。

Java编程为每个原始数据types提供了包装类,将原始数据types转换为包装类的相应对象。

做一个包装类健康是不是一件容易的工作。 理解一个包装类是如何被其他人devise的也不是一件容易的事情。 因为这是想法,而不是代码。 只有当你明白这个主意,你才能理解包装。

包装类是为了满足程序员的基本需求而存在的 – 也就是说只要对象被允许就使用原始值。 顾名思义,包装类包装一个原始值并将其保存在一个Object中。 所以,所有那些不允许原语的地方 – 比如generics,散列图键,Arraylists等 – 程序员现在可以select提供这些原始值作为它们相应的包装types。

另外,这些包装types还有一些实用的方法,用于从原始types转换为相应的包装types和后面,也从string转换为包装types。

我已经在我的博客中写了一篇关于包装类的详细文章,它深入地解释了包装types的概念 – http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples/(Disclosure -这个博客是由我拥有的)

我目前使用包装类为我的项目和我得到的主要好处(只是单一的好处来扩大主题的解释):

exception处理:我的主类,另一个类包装,有方法抛出exception如果发生任何,所以我创build了一个包装类,处理exception并立即logging它们。 所以,在我的主要范围内,没有任何exception处理。 我只是调用一个方法,做一些事情。

简单的用法:我可以轻松地启动对象。 通常启动阶段是由很多步骤构成的。

代码可读性:当另一个程序员打开我的代码时,代码看起来非常清晰,易于操作。

隐藏细节:如果你正在生成另一个程序员将​​要使用的类,那么你可以包装细节,如“error handling,exception处理,logging消息等等”,以便程序员不必处理混乱,只是简单地使用这些方法。

包装类是一个类,它只是为了保存某些东西并添加一些function。 在Java中,因为基元(如int,float,chars …)不是对象,所以如果你想像对待它们那么你必须使用包装类。 假设你想创build一个int整型vector,问题是一个Vector只保存对象而不是基元。 所以你要做的是把所有的整数都放在一个Integer包装中,然后使用它。 例:

 int number = 5; Integer numberWrapped = new Integer(number); //now you have the int in an object. //and this is how to access the int value that is being wrapped. int again = numberWrapped.intValue(); 

包装器是用于在不同平台之间的两个不同应用程序之间进行通信的类