Wrapper Class
Wrapper Class е клас, чийто обект обвива или съдържа примитивни типове данни.
С други думи, Wrapper Class позволява на примитивните типове да се третират като обекти.
Когато създаваме обект от Wrapper Class, той съдържа поле, в което можем да съхраняваме примитивна стойност. Това позволява:
- Използване на примитивни типове в структури от данни, които приемат само обекти (напр.
ArrayList,HashMap). - Извикване на методи върху стойности, които иначе са примитивни типове.
- Удобно преобразуване между примитивни типове и обекти чрез boxing и unboxing.
Преобразуване на примитивни типове в Wrapper Class
Java предлага механизъм за опаковане на примитивни типове в обекти, наречен boxing, и обратно – unboxing.
- Boxing: конвертира примитивен тип в обект на Wrapper Class.
- Unboxing: конвертира обект на Wrapper Class обратно в примитивен тип.
От Java 5 нататък тези операции се изпълняват автоматично:
- Autoboxing: автоматично опаковане на примитивен тип в обект.
- Auto unboxing: автоматично разопаковане на обект обратно в примитивен тип.
Wrapper класове в Java
Пакетът java.lang съдържа всички Wrapper класове за примитивните типове:
| Primitive Type | Wrapper class |
|---|---|
| boolean | Boolean |
| char | Character |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
Пример за Boxing и Autoboxing
Boxing е процесът, при който примитивен тип се преобразува в обект, за да може да се използва в обектно-ориентирани структури. Autoboxing е автоматичният вариант на този процес.
import java.lang.Integer;
public class Application {
public static void main(String args[]) {
//Конвертиране на int към Integer
int a = 20;
Integer i = Integer.valueOf(a);
Integer j = a;
System.out.println(a+" "+i+" "+j);
}
}
- Integer i = Integer.valueOf(a); – ръчно създаване на обект от Wrapper Class.
- Integer j = a; – автоматично преобразуване на примитивен тип int в Integer (autoboxing).
Пример за Unboxing и Auto Unboxing
Unboxing е процесът, при който обект на Wrapper Class се преобразува обратно в примитивен тип. Auto unboxing е автоматичният вариант, който компилаторът извършва сам.
import java.lang.Integer;
public class Application {
public static void main(String args[]) {
//Конвертиране на Integer в int
Integer a=new Integer(3);
int i=a.intValue(); //unboxing
int j=a; //auto unboxing
System.out.println(a+" "+i+" "+j);
}
}
- i = a.intValue(); – извлича примитивната стойност ръчно.
- int j = a; – компилаторът автоматично извиква a.intValue() (auto unboxing).
Създаване на Wrapper обекти и връщане обратно към примитивен тип
class Application {
public static void main(String args[]) {
byte a = 1;
Byte byteobj = new Byte(a);
int b = 10;
Integer intobj = new Integer(b);
float c = 18.6f;
Float floatobj = new Float(c);
double d = 250.5;
Double doubleobj = new Double(d);
char e='a';
Character charobj=e;
System.out.println("Boxing");
System.out.println("Byte обекта byteobj: " + byteobj);
System.out.println("Integer обекта intobj: " + intobj);
System.out.println("Float обекта floatobj: " + floatobj);
System.out.println("Double обекта doubleobj: " + doubleobj);
System.out.println("Character обекта charobj: " + charobj);
byte bv = byteobj;
int iv = intobj;
float fv = floatobj;
double dv = doubleobj;
char cv = charobj;
System.out.println("Unboxing");
System.out.println("byte стойността на bv: " + bv);
System.out.println("int стойността на iv: " + iv);
System.out.println("float стойността на fv: " + fv);
System.out.println("double стойността на dv: " + dv);
System.out.println("char стойността на cv: " + cv);
}
}