当前位置: 首页 > wzjs >正文

四川成都企业高端网站建设西安网站自然排名优化

四川成都企业高端网站建设,西安网站自然排名优化,四川省采购一体化平台,做水果网站弄个什么名字泛型类和泛型方法有类型参数,这使得他们可以准确地描述用特定类型实例化时会发生什么。 在有泛型类之前,Java程序员都是使用Object来编写适用于多种类型的代码。这很繁琐同时很不完全。 1.为什么要使用泛型程序设计? 泛型程序设计意味着编…

泛型类和泛型方法有类型参数,这使得他们可以准确地描述用特定类型实例化时会发生什么。

在有泛型类之前,Java程序员都是使用Object来编写适用于多种类型的代码。这很繁琐同时很不完全。

1.为什么要使用泛型程序设计?

泛型程序设计意味着编写的代码可以对应多种不同类型的对象重用,比如你一一定不希望为收集到的String,File对象分别编写不同的类。事实上,确实不需要这么做,因为一个ArrayList类就可以收集任何类的对象。这就是泛型程序设计的一个例子。

1.1类型参数的好处

在Java中增加泛型类之前,泛型程序设计使用继承实现。ArrayList类只维护一个Object引用的数组:

public class ArrayList {private Object[] elements;//.......public Object get(int i){return null;};public void add(Object o){}public static void main(String[] args) {ArrayList files = new ArrayList();String filename = (String) files.get(0);
        files.add(new File("xxxxxxx"));files.add(new Student());
    }
//这里的方法存在两个问题,
//1.当获取一个值时由于get方法的返回值参数为Object我们调用add得到的返回值必须进行强制类型转换。
//2.此外,这里没有错误检查,我们可以向数组列表中添加任何类的值,我们定义的files只想插入文件类型但是我们定义一个Student类型之后也可以插入。
}

泛型提供了一个很好的解决方案:类型参数。

ArrayList有一个类型参数来指明元素的类型:

ArrayList<String> list = new ArrayList<>(); 

这使得代码的可读性很好,让人一眼看起来就知道这个数组列表中包含的是String对象。

此时我们调用String filename = files.get(0); 编译器知道返回类型是String了无需从Object的返回类型强转为String。

编译器还知道ArrayList<String>的add方法有一个String的参数,这比有一个可以包含万物的Object类型的参数要安全的多,现在编译器就可以检查,防止你插入错误的对象。

比如:

ArrayList<String> files = new ArrayList<>();
String filename = "xxxxxx";
files.add(filename);
files.add(new Student());  //编译报错

第四行是无法编译通过的。不过,出现编译错误比运行时出现类的强制类型转换异常好得多。

这正是类型参数的魅力所在,它会让你的程序更易读更安全。

2.定义简单泛型类

泛型类就是有一个或者多个类型变量的类,我们使用一个Pair的简单类来作为例子。这个类使得我们可以只关注泛型,而不用为数据存储的细节而分心。

public class Pair<T>{private T first;private T second;public Pair(T first, T second) {this.first = first;this.second = second;}public Pair(){first = null;second = null;}
}

Pair类引入了一个类型变量T,使用尖括号(<>)括起来,放在类名的后面。泛型类可以有多个类型变量。例如,Pair类,其中第一个字段和第二个字段使用不同的类型:

public class Pair<T , U>{.......}

类型变量<T, U>等在整个类定义中用于指定方法的返回类型以及字段和局部变量的定义类型。

可以用具体的类型替换类型变量来实例化泛型类型,比如:

public class Pair<String> {private String first;private String secodn;public Pair(String first, String secodn) {this.first = first;this.secodn = secodn;}public Pair() {}public String getFirst() {return first;}public void setFirst(String first) {this.first = first;}public String getSecodn() {return secodn;}public void setSecodn(String secodn) {this.secodn = secodn;}
}换句话说,泛型类相当于普通类的工厂。

如下代码中具体使用了Pair类。静态的minmax方法遍历了数组同时据算出最小值和最大值,他用一个Pair对象反回两个结果。

回想一下:compareTo方法比较两个字符串,如果字符串相同则返回0,按照字典顺序,如果第一个字符串比第二个字符串靠前,就返回一个负整数,如果第一个字符串比第二个字符串靠后就返回一个正整数。

public class PairTest1 {public static void main(String[] args) {String[] words = {"Marry","had","a","little","lamb"};Pair<String> mm = ArrayAlg.minmax(words);System.out.println("min = " + mm.getFirst());System.out.println("max = " + mm.getSecond());}
}
public class ArrayAlg{public static Pair<String> minmax(String[] a){if(a == null || a.length == 0) return null;String min = a[0];String max = a[a.length-1];for (int i = 1; i < a.length; i++) {if(min.compareTo(a[i]) > 0) min = a[i];if(max.compareTo(a[i]) < 0) max = a[i];}return new Pair<>(min,max);}
}

3.泛型方法

我们不仅可以定义一个带参数的泛型类,还可以定义一个带有类型参数的方法。

public class ArrayAlg{public static <T> T getMiddle(T[] a){return a[a.length / 2];}
}

这个方法是在普通类中定义的,而不是在泛型类中。不过这确实是一个泛型方法,可以从尖括号和类型变量看出这一点。注意,类型变量放在修饰符后面,并在泛型类型的前面。

泛型方法也可以定义在泛型类当中。

当调用一个泛型方法时,可以把具体类型包围在尖括号中,放在方法名前面。

String middle1 = ArrayAlg.<String>getMiddle(words);
System.out.println(middle1);

其实编译器可以推断出你想要的方法是哪个即方法调用中可以省略<String>类型参数。

String middle = ArrayAlg.getMiddle(words);

System.out.println(middle);

几乎在所有情况下泛型方法的类型推导都可以正常工作。偶尔,编译器也会提示错误,考虑下面这个案例:

4.类型变量的限定

http://www.dtcms.com/wzjs/605031.html

相关文章:

  • 注册网站的信息网站南通外贸网站推广
  • 论坛网站建设推广优化淮南网站建设 飞沐
  • 做网站到内容填充需要多久江苏茂盛建设有限公司网站
  • 网站内的链接怎么做的企业域名邮箱
  • 怎样自己做网络推广网站江苏系统建站怎么用
  • 网站建设有哪些问题企业设计网站系统
  • 上海网站建设 知名觉公众号免费模板网站
  • 飞鱼网站建设网页设计项目案例网站
  • 上海网站建设300企业网站建设时间表
  • 无锡网络公司无锡网站制作兰州室内设计公司排名
  • 网站建设优化河南国际物流东莞网站建设
  • 宝宝投票网站怎么做网站备案 网站
  • 东莞seo网站制作报价装修设计图纸效果图
  • 中卫网站建设哪家好做公司网站解析
  • 夏邑做网站哪家的网站效果好
  • 企业网站完整版做seo需要建网站吗
  • 外包网站设计公司做营销型网站的公司
  • 网站的发布与推广怎么写注册网站费用明细
  • 长春做网站长春网站设计网站设计简单讲解
  • 网站开发充值功能dw个人网站设计模板免费
  • 军事最新消息广州优化网站
  • 淘宝发布网站建设种子在线资源搜索神器
  • 微信公众号 链接微网站钢筋网片理论重量表规格表
  • 益阳网站制作公司地址构建一个网站的步骤
  • 雷州手机网站建设电子商务网站软件建设核心
  • 做网站怎么插音乐循环广东的网站备案
  • 辽宁网站建设企业定制公司永久免费linux服务器下载
  • 沧州国外网站建设织梦如何做汽车贸易网站
  • 宁津 做网站建自己的网站做外贸
  • 开发网站培训班厦门网站建设推广