当前位置: 首页 > 图灵资讯 > 技术篇> Cap 通用类型和基本原理

Cap 通用类型和基本原理

来源:图灵教育
时间:2024-12-15 19:41:44

涵盖的主要技能和概念

泛型类型的优点

  • 以安全可靠的方式重用代码。
  • 消除手动强制并减少类型不匹配错误。

创建类、方法、构造函数和通用接口

  • 参数化类型的使用。
  • 处理多种类型数据的类和方法的定义。

有限类型参数

  • 带有继承或接口实现扩展的通用类型限制。

通配符和有限通配符的使用

  • 灵活地处理未知类型(?)。
  • 具有上限 (? extends) 和下限 (? super) 的通配符。

原始类型

  • 使用泛型类而不指定类型,并带有安全警告。

使用菱形运算符进行类型推断 ()

  • 减少创建通用对象时定义类型的冗余。

了解擦除技术

  • 编译器如何将泛型转换为基于对象的代码。

泛型的限制和歧义

  • 限制,例如不直接使用原始类型。
  • 与兼容性和继承相关的问题。

代码示例 基本泛型类

// classe genérica com tipo parametrizado t
class caixa<t> {
    private t valor;

    public void adicionar(t valor) {
        this.valor = valor;
    }

    public t obter() {
        return valor;
    }
}

// uso da classe genérica
caixa<string> caixatexto = new caixa<>();
caixatexto.adicionar("olá, genéricos!");
system.out.println(caixatexto.obter());

通用方法

// método genérico que troca dois elementos em um array
public static <t> void trocar(t[] array, int i, int j) {
    t temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

// uso do método genérico
integer[] numeros = {1, 2, 3, 4};
trocar(numeros, 1, 3);
system.out.println(arrays.tostring(numeros)); // saída: [1, 4, 3, 2]

有限通配符

// soma elementos de uma lista de números (ou subclasses de number)
public static double somalista(list<? extends number> lista) {
    double soma = 0.0;
    for (number numero : lista) {
        soma += numero.doublevalue();
    }
    return soma;
}

// uso do curinga limitado
list<integer> inteiros = arrays.aslist(1, 2, 3);
system.out.println(somalista(inteiros)); // saída: 6.0

用钻石进行类型推理

// inferência de tipo ao criar um arraylist genérico
list<string> lista = new arraylist<>();
lista.add("java");
lista.add("genéricos");
system.out.println(lista);

通用接口

// interface genérica
interface pilha<t> {
    void push(t item);
    t pop();
}

// implementação da interface genérica
class pilhaarray<t> implements pilha<t> {
    private list<t> itens = new arraylist<>();

    public void push(t item) {
        itens.add(item);
    }

    public t pop() {
        return itens.isempty() ? null : itens.remove(itens.size() - 1);
    }
}

通用构造函数

class Par<T, U> {
    private T primeiro;
    private U segundo;

    // Construtor genérico
    public <V> Par(V valor, T primeiro, U segundo) {
        System.out.println("Valor adicional: " + valor);
        this.primeiro = primeiro;
        this.segundo = segundo;
    }
}

java 中泛型的要点

  • 类型安全:通过防止不适当的转换导致运行时错误来降低风险。
  • 原始类型:不能直接在泛型中使用,但可以与包装器一起使用(例如,integer for int)。
  • 擦除限制:在编译过程中,泛型类型被 object 或指定的限制(例如,extends)替换。
  • 强大的通配符:在处理未知类型时提供灵活性,同时保持类型安全。

这些概念使泛型成为在 java 中创建可重用、高效且安全的代码的重要工具。

--

Cap 通用类型和基本原理

以上就是Cap 通用类型和基本原理的详细内容,更多请关注图灵教育其它相关文章!