package com.example.domain;

import java.util.ArrayList;
import java.util.List;

public class WrapperExample {

	public static void main(String[] args) {
		// non-generic/not type-safe
		// all values stored as Object type
		List numbers = new ArrayList();
		numbers.add(100);
		numbers.add("hello");
		numbers.add(true);

		// retrieve values from list
		for (Object value : numbers) {
			// check the true/actual data type of value
			if (value instanceof Integer) {
				Integer num = (Integer) value;
				System.out.println(num * 2);
			} else {
				System.out.println(value);
			}
		}
		
		// generic/type-safe
		List<Integer> gennumbers = new ArrayList<Integer>();
		gennumbers.add(100);
//		gennumbers.add("hello");	// compile-time error
		
		for (Integer i : gennumbers) {
			System.out.println(i * 3);
		}
		
		// boxing: convert primitive to object - old
		int primNum = 9;
		Integer objNum = new Integer(primNum);
		
		// autoboxing
		objNum = primNum;
		
		// unboxing: convert object to primitive - old
		primNum = objNum.intValue();
		
		// autounboxing
		primNum = objNum;
	}
}
