我是靠谱客的博主 狂野小蘑菇,最近开发中收集的这篇文章主要介绍关于通配符参数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

类型安全虽然有用,但有时会影响完全可以接受的结构。比如有时候要比较两个对象数组的平均值是否相同,而不考虑对象包含的数值的数据类型具体是什么。例如:一个int 数组的平均值为2,一个double 数组的平均值为2.0,那么平均值是相同的。解决此问题的途径是使用通配符(wildcard)参数,由?指定,表示未知类型。

有界通配符

可以使用与界定类型参数相同的方法界定通配符参数,对于操作类层次的的泛型来说很重要。比方说有个例子是输出维数数组的坐标值,有二维,三维,和四维

class TwoD {

  int x, y;

 

  TwoD(int a, int b) {

    x = a;

    y = b;

  }

}

class ThreeD extends TwoD {

  int z;

  

  ThreeD(int a, int b, int c) {

    super(a, b);

    z = c;

  }

}

class FourD extends ThreeD {

  int t;

 

  FourD(int a, int b, int c, int d) {

    super(a, b, c);

    t = d; 

  }

}

 

 

下面是一个泛型类,该类存储类一个数组;

public class Coords<T extends TwoD> {//有界类型 通过extends

       T []coords ;

       Coords(T []o){

       coords=o;

       }

该类指定一个由TwoD界定的类型参数

现在使用通配符定义一个输出方法:

static void showXY(Coords<?> o){//输出二维坐标,类型通配符由表示;

           System.out.println("现在输出二维坐标的位置:");

           for(int i=0;i<o.coords.length;i++)

           System.out.println("坐标的值分别是:"+o.coords[i].x+""+o.coords[i].y);

           System.out.println();

       }

 

(因为是进行类之间的操作,所以使用通配符进行操作)

因为Coords指定类一个TwoD上界,所以showXY显示输出每一个TwoD类及其子类的数组。

如果要输出三维坐标怎么办呢?

Coords对象都只有两个坐标,无法输出X,Y,Z三个参数。

这是要使用有界的通配符参数。

现在定义一个方法,要求分别输出三维坐标值:

static void showXYZ(Coords<? extends ThreeD > a){

           System.out.println("现在输出三维坐标的位置:");

           for(int i=0;i<a.coords.length;i++)

           System.out.println("坐标的z值分别是:"+a.coords[i].x+""+a.coords[i].y+""+a.coords[i].z);

           System.out.println();

   因为这个界定,可以使用Coords<ThreeD>Coords<FourD>对象调用showXY,但是不能调用TwoD类型对象,会导致编译储出错

    static void showXYZT(Coords<? extends FourD > a){

           System.out.println("现在输出四维坐标的位置:");

           for(int i=0;i<a.coords.length;i++)

           System.out.println("坐标的z值分别是:"+a.coords[i].x+""+a.coords[i].y+""+a.coords[i].z+""+a.coords[i].t);

           System.out.println();

       }  }

通过使用<? Extends superclass>的方法便可以指定上界的类型参数

使用<?extends super subclass>来指定下界的类型参数

当指定上界的类型参数时,?后表明可以匹配的上界,如果不匹配会编译出错;

当指定下界时,实际上是一个排除,只有指定下界的超类是可接受参数,不常用。

最后

以上就是狂野小蘑菇为你收集整理的关于通配符参数的全部内容,希望文章能够帮你解决关于通配符参数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部