美文网首页
Java 泛型

Java 泛型

作者: ninedau | 来源:发表于2018-05-06 16:26 被阅读0次

1.概述

一直在泛型这块的使用非常的浅,直到最近使用对象型数据库模式时才发现有疑惑。现在俺来详细的记录下。本文参考 java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一 # java 泛型详解

2.泛型的类别

  • 普通泛型
    1. 释义:设置一个标识符(一般用“type”的T表示),定义类型时可以通过外部来决定。
    2. 实例:
public class Test {
    public static void main(String[] args) {
        Person<String> p = new Person<>();//向下转型
        p.value="二小";
        Person<Integer> p1 = new Person<>();
        p1.value = 2;
        System.out.println(" p = "+p.value  +" , p1= "+p1.value);
    }
}

class Person<M> {//标示符可以随意写,但会限制类别的标识符类型;  
// 因声明限制,不可使用除M外的其他标示符; 
//类型由M决定,即:由实例对象确定。 ps:懒了点就不封装了。
   M value;
}
  • 通配符
  1. 实例
public class Test {
    public static void main(String[] args) {
        Person<String> p = new Person<>();//向下转型
        p.value="二小";
        Person<Integer> p1 = new Person<>();
        p1.value = 2;
        System.out.println(" p = "+fun(p).getClass().getName() + "@" + Integer.toHexString(fun(p).hashCode())  +" , p1= "+fun(p1));
    }
////泛型作为通配符的使用,当不知道要返回何种情况时处理的。
//定义的使用需要明确的标识符,为在类别中统配符的使用先做好预留和区分,但是传入时使用"?"
//可最大限度的扩展该方法的使用性。
    public static Object fun(Person<?> p){
        return p.value;
    }
}

class Person<M> {
     M value;
}
  • 受限泛型
public class Test {
    public static void main(String[] args) {
        Person<String> p = new Person();//向下转型
        p.value="二小";
        Person<Integer> p1 = new Person();
        p1.value = 2;
        p.aa();
    **这个fun(p) 会报编译错误,因p的泛型类型飞Number的子类**
        System.out.println(" p = "+fun(p)  +" , p1= "+fun(p1));
    }

    public static <T> Object fun(Person<? extends Number> p){
        return p.value;
    }
}

class Person<M> {
    public void aa(){
        System.out.println("父类方法使用");
    }
}
  • 无法向上转型
    1.定义:因其定义的类型为不确定的。所以向上转型的可能性太多了。故而不支持向上转型。
······
        Person<String> p = new Person();//向下转型
        p.value="二小";
        Person<Object> p1 = p;// 是会报错的。
······
  • 泛型接口
    1.定义:接口定义泛型,实现类可以继续使用泛型。也可以就泛型做具象化。不详述了。
  • 泛型方法
    1.定义:泛型方法会加上一个<T>,任意标识符均可。作用个人认为作为一个声明值。
  public static <X> void fun(Person<X> p){       //ok的
  public static void fun(Person<X> p){     // 报错 ,因该函数无法识别X是什么类型。
  • 通过泛型方法返回泛型类型实例

  • 使用泛型统一传入的参数类型

  • 泛型数组

  //泛型数组的返回。通过可变数组参数返回。
    public static <X> X[] fun(X... params){
        return params;
    }
  • 泛型嵌套设置
    1.定义:泛型个数可以有多个,不一定只用一个泛型类型。
public class A<T,M,C>{  // 相当于声明了三个不同的泛型类型在该类中。
}
  • 不一定需要通过参数来确定泛型的准确类型,可以通过返回值

相关文章

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • 第二十八课:泛型

    泛型出现之前 泛型出现之后 Java深度历险(五)——Java泛型

  • Kotlin 泛型

    说起 kotlin 的泛型,就离不开 java 的泛型,首先来看下 java 的泛型,当然比较熟悉 java 泛型...

  • java泛型中类型擦除的一些思考

    java泛型 java泛型介绍 java泛型的参数只可以代表类,不能代表个别对象。由于java泛型的类型参数之实际...

  • Java泛型

    参考:Java知识点总结(Java泛型) 自定义泛型类 自定义泛型接口 非泛型类中定义泛型方法 继承泛型类 通配符...

  • Java泛型—Java语法糖,只在编译有作用,编译后擦出泛型

    Java泛型—Java语法糖,只在编译有作用,编译后擦出泛型 在代码进入和离开的边界处,会处理泛型 Java泛型作...

  • JAVA 核心笔记 || [xxx] 泛型

    泛型 JAVA 的参数化类型 称为 泛型 泛型类的设计 Learn12.java 运行

  • 简单回顾Java泛型之-入门介绍

    什么时候开始有了Java泛型?什么是Java泛型?为什么要引入Java泛型?什么时候用到了泛型?可不可以给泛型下一...

  • Kotlin 泛型

    Kotlin 支持泛型, 语法和 Java 类似。例如,泛型类: 泛型函数: 类型变异 Java 的泛型中,最难理...

  • JAVA-泛型

    JAVA-泛型 sschrodinger 2018/11/15 简介 泛型是Java SE 1.5的新特性,泛型的...

网友评论

      本文标题:Java 泛型

      本文链接:https://www.haomeiwen.com/subject/akdlrftx.html