文档章节

Java泛型理解

james_you
 james_you
发布于 2014/05/30 11:23
字数 392
阅读 367
收藏 11
package basic;

public class GenricTest {

    /** 
     * @Title: Java泛型理解 
     * @Description: 
     * @param @param args    设定文件 
     * @return void    返回类型 
     * @throws 
     */
    public static void main(String[] args) {
        //编译不会报错,因为编译时,会做类型擦除
        Pair1<String> p1 = new Pair1("test",1);
        //首先调用getFirst方法,然后调用getSecond方法
        System.out.println(p1.getFirst());//打印test
        System.out.println(p1.getSecond());//报错 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
        //首先调用getSecond方法,然后调用getFirst方法
        System.out.println(p1.getSecond());//报错 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
        System.out.println(p1.getFirst());
        //声明时就出错,不能通过编译,因为java根据构造方法里面的第一个参数类型,推导第二个参数类型
        //所以,推荐下面这样的写法,避免到运行期才发生错误
        Pair1<String> p2 = new Pair1<String>("test",1);
        //下面这种写法编译器也不会报错,运行时也不会报错
        Pair<String,Integer> pair1 = new Pair("test","test");
        System.out.println(pair1.getFisrt());
        System.out.println(pair1.getSecond());
        //下面这种写法也是可以的
        Pair<String,?> pair3 = new Pair<String,Integer>("test",123);
        System.out.println(pair3.getFisrt());
        System.out.println(pair3.getSecond());
        //不过,还是推荐下面这种写法,第一时间发现错误
        Pair<String,Integer> pair2 = new Pair<String,Integer>("test","test");
    }

}
class Pair<T,R>{
    private T fisrt;
    private R second;
    
    public Pair(T first,R second){
        this.fisrt = first;
        this.second = second;
    }
    
    public T getFisrt() {
        return fisrt;
    }
    public void setFisrt(T fisrt) {
        this.fisrt = fisrt;
    }
    public R getSecond() {
        return second;
    }
    public void setSecond(R second) {
        this.second = second;
    }
    
}
class Pair1<T>{
    private T first;
    private T second;
    
    public Pair1(T first,T second){
        this.first = first;
        this.second = second;
    }
    
    public T getFirst() {
        return first;
    }
    public void setFirst(T first) {
        this.first = first;
    }
    public T getSecond() {
        return second;
    }
    public void setSecond(T second) {
        this.second = second;
    }
}


© 著作权归作者所有

共有 人打赏支持
james_you
粉丝 5
博文 25
码字总数 12119
作品 0
长宁
技术主管
Java 8新特性探究(六)泛型的目标类型推断

简单理解泛型 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。通俗点将就是“类型的变量”。这种类型变量可以用在类、接口和方法的创建中。...

OSC闲人
2013/12/14
0
3
Kotlin 泛型 VS Java 泛型

建议先阅读我的上一篇文章 -- Java 泛型 和 Java 泛型一样,Kotlin 泛型也是 Kotlin 语言中较难理解的一个部分。Kotlin 泛型的本质也是参数化类型,并且提供了编译时强类型检查,实际上也是伪...

JohnnyShieh
06/11
0
0
Java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。 本文参考java 泛型详解、Java中的泛型方法、 java泛型详解 1 概述 泛型在j...

hensemlee
09/23
0
0
Spring 中好用的泛型操作API

随着泛型用的越来越多,获取泛型实际类型信息的需求也会出现,如果用原生API,需要很多步操作才能获取到泛型,比如: ParameterizedType parameterizedType = (ParameterizedType) ABServic...

宇的季节
06/06
0
0
Kotlin语言中的泛型设计哲学

Kotlin语言的泛型设计很有意思,但并不容易看懂。关于这个部分的官方文档,我反复看了好几次,终于弄明白Kotlin语言泛型设计的背后哲学。这篇文章将讲述Kotlin泛型设计的整个思考过程及其背后...

欧阳锋
04/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

arcgis jsapi接口入门系列:总览

开发环境: arcgis jsapi版本4.9 由于我们这套代码是基于vue,webpack开发的,会有少数vue代码,但总体不影响 里面还有些我们公司的js库和html css,给出的代码不能百分百直接运行,主要还是...

canneljls
28分钟前
1
0
月薪80k阿里架构师漫谈他是如何从一名小码农走到架构师的

01 刚当程序员时,我是属于那种勤勤恳恳类型的员工,工作态度用认真来形容不为过,每天我几乎是团队里最早到公司,又最晚下班的一个。而组员张工一般情况下都是准时上下班的,即使项目进度比...

Java填坑之路
31分钟前
1
0
oracle的resetlogs机制浅析

oracle的resetlogs机制浅析 alter database open resetlogs 这个命令我想大家都很熟悉了,那有没有想过这个resetlogs选项为什么要用?什么时候用? 它的原理机制是什么?他都起哪些作用? 我...

突突突酱
32分钟前
1
0
JAVA 获取两个日期间的所有日期

public static List<String> getDates(String startDate, String endDate){ List<String> dates = new ArrayList<>(); try { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Dat......

尘叙缘
39分钟前
2
0
Innodb中的事务隔离级别和锁的关系

#一次封锁or两段锁? 因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道会用到哪些数据,然后全部锁住,在方法运行之后,再全部解锁。...

Skqing
53分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部