文档章节

Java泛型理解

james_you
 james_you
发布于 2014/05/30 11:23
字数 392
阅读 370
收藏 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中的泛型 (上) - 基本概念和原理

下面我们来详细讨论Java中的泛型,虽然泛型的基本思维和概念是比较简单的,但它有一些非常令人费解的语法、细节、以及局限性,内容比较多。 所以我们分为三节,逐步来讨论,本节我们主要来介...

笔记12
2016/10/29
394
0
Java 8新特性探究(六)泛型的目标类型推断

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

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

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

JohnnyShieh
2018/06/11
0
0
提给程序员和开发者的 10 道 Java 泛型面试题

关于泛型的面试题在 Java面试中变得越来越常见,因为 Java 5问世已经有相当长的时间了,越来越多的应用已经迁移到Java 5上来了,并且几乎所有新的Java开发工作也都是在Tiger(Java 5的项目代号...

lwei
2013/10/18
13.2K
30
10 道关于 Java 泛型的面试题

1.Java中的泛型是什么 ? 使用泛型的好处是什么? 这是在各种Java泛型面试中,一开场你就会被问到的问题中的一个,主要集中在初级和中级面试中。那些拥有Java1.4或更早版本的开发背景的人都知道...

蚂蚁-Declan
2018/10/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于eclipse2017 import javax.servlet.jsp.tagext引入错误得问题

在eclipse中: 这个javax.servlet.jsp.tagext属于是tomcat相关jar包找到jsp-api.jar 在tomcat文件夹下边的lib文件夹中就有 如果项目中报错的话 把这个加入到项目中 在myeclipse中: 如下图,...

ZhangLG
6分钟前
0
0
如何用RSS订阅?

本文由云+社区发表 摘要:我们常常会有订阅别人文章的需求,有更新的时候希望能有提醒的功能,RSS就是这样一个订阅的方式。很多网站上看到RSS的入口,点进去以后总是显示一堆的XML代码,我们...

腾讯云加社区
7分钟前
0
0
springcloud整体架构

架构 说明 针对这个架构图我分层介绍一下: 1、是web服务器的选型,这个我选择的是nginx+keepalived,haproxy也是一个选择,但是haproxy在反向代理处理跨域访问的时候问题很多。所以我们ngi...

张欢19933
9分钟前
0
0
Linux权限详解

Linux权限详解 命令之 chmod:修改权限 阅读目录(Content) 权限简介 一、快速入门 更改文件权限 (chmod命令) 一般使用格式 数字权限使用格式 更改文件拥有者(chown命令) 二、Linux权限详...

hblt-j
16分钟前
0
0
postgres预写式日志的内核实现详解-heap2类型

导读: postgres预写式日志的内核实现详解-概述 postgres预写式日志的内核实现详解-wal记录结构 postgres预写式日志的内核实现详解-wal记录写入 postgres预写式日志的内核实现详解-wal记录读...

movead
33分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部