genéricos de Java y embalajes

directorio

1. Genérico

1.1 referencia a una clase genérica

1.2 Definiciones genéricas

1.3 Los genéricos sencillo principio detrás de la acción y detrás de los tiempos

1.4 clase genérica

1,5 trampa Genérico

1.6 sentido genérico

2. embalaje

2.1 tipos de datos básicos directos y la relación correspondiente entre el envasado

2.2 Uso del envase, embalaje (boxeo) y unboxing (Unboxing)


1. Genérico

1.1 referencia a una clase genérica

Pregunta: solo se guardan los datos simples int secuenciales, si tenemos que guardar la tabla de orden se refiere a las referencias de tipo objeto persona, será la forma de resolver? Si necesita guardar un punto de referencia al objeto libro que escriba?
Respuesta: 1. En primer lugar, sabemos que una premisa en el proceso de aprendizaje de varios estados, se refiere a una clase base puede apuntar a una subclase objeto.
           2. En segundo lugar, también somos conocidos objeto de Java es el padre de todas las clases.
Por lo tanto, para resolver estos problemas, es natural pensar en una solución, los elementos de nuestra solicitud de tipo de tabla definida como tipo de objetos, por lo que
nuestro tipo de objetos de referencia pueden apuntar a un objeto de tipo Persona o señalar objetos de tipo libro

public class MyArrayList {
    private Object[] array; // 保存顺序表的元素,即 Object 类型的引用
    private int uesdSize; // 保存顺序表内数据个数
    public void add(Object o) { 尾插 }
    public Object get() { 获取最后位置的元素 }
...
}

Legado: Ahora MyArrayList Aunque se puede hacer para añadir cualquier tipo de referencia al cual, pero se encontró con el siguiente código creará problemas

MyArrayList books = new MyArrayList();
books.add(new Book);
// 将 Object 类型转换为 Person 类型,需要类型转换才能成功
// 这里编译正确,但运行时会抛出异常 ClassCastException
Person person = (Person)books.get();

Los problemas expuestos anteriormente, cuanto menor es el impacto. Problemas durante la compilación sólo hará que los desarrolladores creen que todos los usuarios de software hacen errores durante la operación de
asumir el riesgo de errores

que necesitamos un mecanismo para aumentar 1. 2. Compilar la comprobación de tipos durante la conversión de tipo de eliminar el uso de Pan tipo nació!
 

1.2 Definiciones genéricas

// 1. 尖括号 <> 是泛型的标志
// 2. T 是类型变量(Type Variable),变量名一般要大写
// 3. T 在定义时是形参,代表的意思是 MyArrayList 最终传入的类型,但现在还不知道                 
public class MyArrayList<T> {
    public T[] elems;
    public int usedSize;
    public MyArrayList() {
        //this.elems = new T[10];错误
        this.elems = (T[])new Object[10];
        this.usedSize = 0;
    }
    public void add(T data) {
        this.elems[this.usedSize] = data;
        this.usedSize++;
    }
    public T get() {
        return this.elems[this.usedSize-1];
    }
    ...
}

Nota: Puede haber múltiples tipos de variables de clase genéricos a, separadas por comas

MyArrayList es una clase genérica

<T>: T es sólo un marcador de posición, la clase actual es un identificador de clase genérica

 

1.3 Los genéricos sencillo principio detrás de la acción y detrás de los tiempos

 

1. Los medicamentos genéricos es un mecanismo en acción durante la compilación, es decir, no hay concepto genérico durante el funcionamiento.
2. código genérico durante la carrera que hemos mencionado anteriormente, el uso del objeto de lograr el efecto (esto no es muy preciso, se explicará el futuro).

 

1.4 clase genérica

// 定义了一个元素是 Book 引用的 MyArrayList
MyArrayList<Book> books = new MyArrayList<Book>();
books.add(new Book());
// 会产生编译错误,Person 类型无法转换为 Book 类型
books.add(new Person());
// 不需要做类型转换
Book book = book.get();
// 不需要做类型转换
// 会产生编译错误,Book 类型无法转换为 Person 类型
Person person = book.get();

A través del código anterior, podemos ver una manera de utilizar la clase genérica: justo detrás con todo tipo de soportes en ángulo, y los soportes de ángulo es una verdadera clase
de tipo, que es el último tipo de T puede ser visto.
Nota: Libro de tipo T sólo puede imaginar, pero en realidad el tipo T o de objetos

1,5 trampa Genérico

  • parámetro de tipo genérico no puede ser un tipo simple . Debe ser objeto de una clase contenedora
  • MyArrayList <int> myArrayList3 = new MyArrayList <> (); 错误
  • No puede ser un nuevo tipo genérico de la matriz T [] T [] T elem = new [10] ;
  • parámetro de tipo genérico no está involucrado en el tipo de composición

1.6 sentido genérico

1. La comprobación de tipos puede realizarse automáticamente

2. conversión de tipo automático

2. embalaje

2.1 tipos de datos básicos directos y la relación correspondiente entre el envasado

tipos de datos básicos clase contenedora
byte Byte
corto Corto
En t Entero
largo Largo
flotador Flotador
doble Doble
carbonizarse Personaje
booleano Boole

Básicamente escribir la primera letra en mayúscula, además de enteros y caracteres

2.2 Uso del envase, embalaje (boxeo) y unboxing (Unboxing)

        //int -> Integer 自动装包/装箱
        Integer a = 10;
        System.out.println(a);
        //int -> Integer 手动装包/装箱
        Integer b = Integer.valueOf(20);
        int c = a;//自动拆包/拆箱     默认拆成整型:intValue
        double d = a.doubleValue();//手动拆包/拆箱       拆成double:doubleValue
        System.out.println(c);
        System.out.println(d);

Nota: Auto-boxing y auto-unboxing es un mecanismo para el trabajo durante la compilación
 

 

 

发布了20 篇原创文章 · 获赞 9 · 访问量 901

Supongo que te gusta

Origin blog.csdn.net/weixin_44915811/article/details/104174722
Recomendado
Clasificación