java有界类型参数的实例用法

java有界类型参数的使用

1、为了声明一个有界类型参数,列出类型参数的名称,然后是extends关键字,最后是它的上界。

public class Box<T> {

    private T t;          

    public void set(T t) {
        this.t = t;
    }

    public T get() {
        return t;
    }

    public <U extends Number> void inspect(U u){
        System.out.println("T: " + t.getClass().getName());
        System.out.println("U: " + u.getClass().getName());
    }

    public static void main(String[] args) {
        Box<Integer> integerBox = new Box<Integer>();
        integerBox.set(new Integer(10));
        integerBox.inspect("some text"); // error: this is still String!
    }
}

2、通过修改泛型方法包含这个有界类型参数。由于我们在调用inspect时还使用了String,因此编译将失败

Box.java:21: <U>inspect(U) in Box<java.lang.Integer> cannot
  be applied to (java.lang.String)
                        integerBox.inspect("10");
                                  ^
1 error

3、除对可用于实例化泛型类型的类型进行限制外,还允许调用在边界中定义的方法。

public class NaturalNumber<T extends Integer> {

  private T n;

  public NaturalNumber(T n)  { this.n = n; }

  public boolean isEven() {
    return **n.intValue()** % 2 == 0;
  }

  // ...
}

知识点扩展:

当我们希望对泛型的类型参数的类型进行限制的时候(好拗口), 我们就应该使用有界类型参数(Bounded Type Parameters). 有界类型参数使用extends关键字后面接上边界类型来表示, 注意: 这里虽然用的是extends关键字, 却不仅限于继承了父类E的子类, 也可以代指显现了接口E的类. 仍以Box类为例:

public class Box<T> {

    private T obj;

    public Box() {}

    public T getObj() {
        return obj;
    }

    public void setObj(T obj) {
        this.obj = obj;
    }

    public Box(T obj) {
        super();
        this.obj = obj;
    }

    public <Q extends Number> void inspect(Q q) {
        System.out.println(obj.getClass().getName());
        System.out.println(q.getClass().getName());
    }
}

我加入了public <Q extends Number> void inspect(Q q){...}方法, 该方法的泛型只能是Number的子类.

 Box<String> b = new Box<>();
 b.setObj("Hello");
 b.inspect(12);
 b.inspect(1.5);
 // b.inspect(true); // 编译出错

到此这篇关于java有界类型参数的使用的文章就介绍到这了,更多相关java有界类型参数的使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java有界类型参数的实例用法

    java有界类型参数的使用 1.为了声明一个有界类型参数,列出类型参数的名称,然后是extends关键字,最后是它的上界. public class Box<T> { private T t; public void set(T t) { this.t = t; } public T get() { return t; } public <U extends Number> void inspect(U u){ System.out.println("T: "

  • java默认方法sqrt实例用法

    在接口中我们有许多方法可以实现,其中默认方法引起了大家的注意.每次想要实现类又不知道从何下手的小伙伴,除了可以使用抽象方法外,默认方法sqrt也是不错的选择.下面我们简单对一些方法进行介绍,然后带来具体的默认方法sqrt,在这之前我们先对其它方法进行简单的理解. 1.Java 8 允许我们使用default关键字,为接口声明添加非抽象的方法实现.这个特性又被称为扩展方法.下面是我们的第一个例子: interface Formula { double calculate(int a); defau

  • java SelectableChannel的使实例用法讲解

    1.说明 (1)SelectableChannel 是一个抽象类,它实现了 Channel 接口,这个类比较特殊. (2)SelectableChannel 可以被 Selector 用来多路复用,不过首先需要调用 selectableChannel.configureBlocking(false) 调整为非阻塞模式. 2.实例 SelectionKey register(Selector sel, int ops) SelectionKey register(Selector sel, int

  • java AOP原理以及实例用法总结

    AOP : 面向切面编程 在程序设计中,我们需要满足高耦合低内聚,所以编程需满足六大原则,一个法则. AOP面向切面编程正是为了满足这些原则的一种编程思想. 一.装饰者模式: 当我们需要给对象增加功能时,为了满足单一职责原则,可利用装饰者模式编程,创建一个类用来装饰原来的类,这个类写需要在原来的功能上增加的功能. 比如:一个类里面有一个增加图书的功能, @Service public class BookSericeImpl implements BookSerice { @Override p

  • java中gc算法实例用法

    在我们对gc中的算法有基本概念理解后,要把算法的理念实现还需要依托实际垃圾收集器的使用.因为光靠一些简单的原理不足以支撑整个程序的运行,在回收机制上有专门的收集器.下面我们就垃圾收集器的概念.使用注意事项.收集器图解进行介绍,然后带来两种常见的垃圾收集器供大家参考. 1.概念 垃圾收集器时之前列举的垃圾收集算法的具体实现. 2.注意事项 每一个回收器都存在Stop The World 的问题,只不过各个回收器在Stop The World 时间优化程度.算法的不同,可根据自身需求选择适合的回收器

  • java Swing组件setBounds()简单用法实例分析

    本文实例讲述了java Swing组件setBounds()简单用法.分享给大家供大家参考,具体如下: 先看API: public void setBounds(Rectangle r) 移动组件并调整其大小,使其符合新的有界矩形 r.由 r.x 和 r.y 指定组件的新位置,由 r.width 和 r.height 指定组件的新大小 参数: r - 此组件的新的有界矩形 从API来看,该方法的作用相当于setLocation()与 setSize()的总和.在实际使用时,需将容器的layout

  • JAVA中的final关键字用法实例详解

    本文实例讲述了JAVA中的final关键字用法.分享给大家供大家参考,具体如下: 根据上下文环境,java的关键字final也存在着细微的区别,但通常指的是"这是无法改变的."不想改变的理由有两种:一种是效率,另一种是设计.由于两个原因相差很远,所以关键子final可能被误用. 接下来介绍一下使用到final的三中情况:数据,方法,类 final数据 许多编程语言都有某种方法,来向编译器告知一块数据是恒定不变的.有时数据的恒定不变是很有用的,例如: 1. 一个编译时恒定不变的常量 2.

  • java中静态导入机制用法实例详解

    java中静态导入机制用法实例详解 这里主要讲解了如何使用Java中静态机制的用法,这里提供了简单实例大家可以参考下. 静态常量类 在java开发中,我们会经常用到一些静态常量用于状态判断等操作.为了能够在多个地方复用这些常量,通常每个模块都会加一个常量类,举个简单的列子: import com.sky.OrderMouleConsstants; /** * Created by gantianxing on 2017/4/21. */ public class Test { public vo

  • JAVA中static方法的用法实例详解

    本文实例讲述了JAVA中static方法的用法.分享给大家供大家参考,具体如下: static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享.只要这个类被加载,Java虚拟机就能根据类名在运行时数据区或者方法区内找到他们.因此,static对象可以在它的任何对象创建之前访

  • java之swing单选框用法实例分析

    本文实例讲述了java之swing单选框用法.分享给大家供大家参考.具体如下: import java.awt.*; import javax.swing.*; import java.awt.event.*; public class test extends JApplet implements ActionListener{ JTextField jtf; public void init(){ Container contentPane = getContentPane(); conte

随机推荐