`
echohfut
  • 浏览: 231103 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jdk泛型

    博客分类:
  • JDK
 
阅读更多

1. 泛型不是协变的

List<Object> 不是 List<String> 的父类型。

 

2. 问号 类型通配符。

List<?> 是任何泛型 List 的父类型,所以您可以将 List<Object>List<Integer>List<List<List<String>>> 代入方法参数是List<?>地方

 

但是把List<Integer>类型的变量赋给List<?>后不是所有的操作都支持。因为list<?>并不知道类型信息,所有与类型相关的方法不能工作,比如add(new Integer(1));然而不依赖与类型的方法仍然工作,比如clear()

 

 

3.泛型参数用在类上时,约束的是类中的所有用到它的方法;泛型参数用到方法级别时约束到的是方法级别的。

 

用以下方式申明

public <T> T ifThenElse(boolean b, T first, T second) {
  return b ? first : second;
}

 

调用时通过类型推理,用以下方式调用

String s = ifThenElse(b, "a", "b");

Integer i = ifThenElse(b, new Integer(1), new Integer(2));

 

4. 受限制的类型参数

 

只允许用Number或者Number子类的类型参数。

public class Matrix<V extends Number> { ... }

 

注意不用受限制的类型参数时,默认是从Object的继承的。即不用extends 语句时取出的都是Object

 

5. 上限通配符和下限通配符

 

上限通配符

interface Collection<V> {
  boolean addAll(Collection<? extends V>);
}

该定义组合了通配符类型参数和有限制类型参数,允许您将 Collection<Integer> 的内容添加到 Collection<Number>。允许加入V或者V的子类

 

下限通配符

 Collection<? super Foo>。只有通配符可以具有下限。

可以加入V或者V的父类

 

下例中copyTo() 方法将 Bunch 的所有值复制到指定的集合中。不是指定它必须是一个 Collection<V>,而可以指定它是一个 Collection<? super V>,这意味着 copyTo() 可以将 Bunch<String> 的内容复制到 Collection<Object>Collection<String>,而不只是可以复制到 Collection<String>

class Bunch<V> {
  public void add(V value) { ... }
  public void copyTo(Collection<? super V>) { ... }
  ...
}

 

 

 

6. 除了jdk中collection api加入泛型支持,其他接口,类的泛型声明实现并不是很好理解

 

接口

public interface Comparable<T> { 
  public boolean compareTo(T other);
} 

 

实现

public class String implements Comparable<String> { ... }

 

在下例中,您定义了一个泛型方法,在类型 T 上泛型化,您约束该类型扩展(实现) Comparable<T>

public static <T extends Comparable<T>> T max(T t1, T t2) {
  if (t1.compareTo(t2) > 0)
    return t1;
  else 
    return t2;
}

 

调用

String s = max("moo", "bark");

 

 

分享到:
评论

相关推荐

    java经典教程-JDK1.5的泛型实现

    Java泛型是自JDK 1.5版本引入的一项重要特性,它极大地提高了代码的类型安全性和重用性。在本教程中,我们将深入探讨Java泛型的实现及其在实际编程中的应用。 泛型允许我们在类、接口和方法中定义类型参数,这样就...

    Jdk15泛型的实现

    ### JDK15泛型的实现 #### 泛型技术概览与JDK1.5的融合 泛型技术,作为Java编程语言中的一个重要概念,旨在提高代码的复用性和类型安全性。早在JDK1.3时,随着GJ(Generic Java)的出现,Java社区开始探索泛型的...

    jdk5.zip_java 泛型_jdk5 泛型_泛型

    Java 泛型是Java编程语言中的一个重要特性,它在JDK 5版本中引入,显著提高了代码的类型安全性和重用性。泛型允许程序员在类、接口和方法中使用类型参数,使得容器(如ArrayList、LinkedList等)可以保存特定类型的...

    介绍 JDK 5中泛型

    到目前为止,Java 类库中泛型支持存在最多的地方就是集合框架。就像容器类是 C++ 语言中模板的主要动机一样改善集合类的类型安全是 Java 语言中泛型的主要动机。集合类也充当如何使用泛型的模型,因为它们演示了泛型...

    JDK1.5泛型讲解和例子

    JDK1.5泛型讲解 不错的东西 对jdk需要研究的朋友不妨看看 新手也来学习学习```

    JDK1.5泛型使用下载

    Java泛型是在JDK 1.5版本中引入的一项重要特性,极大地增强了类型安全性和代码可读性。泛型允许开发者在类、接口和方法中声明类型参数,从而实现对数据类型的抽象。在泛型的帮助下,开发者可以在编译时进行类型检查...

    JDK1.5的泛型实现.pdf

    JDK1.5的泛型实现.pdf

    JDK1.5泛型.rar

    **Java泛型是JDK1.5引入的一个重要特性,极大地提高了代码的类型安全性和重用性。在泛型出现之前,程序员需要在运行时进行强制类型转换,这可能导致ClassCastException。泛型通过在类、接口和方法声明中引入类型参数...

    JDK1.5的泛型实现.zip

    **JDK 1.5 泛型实现** Java Development Kit (JDK) 1.5 是一个里程碑式的版本,因为它引入了泛型,这是一项重要的编程特性,极大地提高了代码的类型安全性和可读性。泛型允许在编译时进行类型检查,避免了运行时...

    JDK1.5新特性泛型_深入研究.doc

    ### JDK1.5新特性泛型深入研究 #### 一、引言 随着软件工程的发展,类型安全成为了程序设计中的一个重要考量因素。Java作为一种广泛使用的编程语言,在其发展历程中不断引入新的特性以满足日益增长的需求。JDK1.5...

    JDBC API基本用法、jar、JDK配置,泛型

    总结来说,这个资料集合涵盖了Java开发基础中的重要概念,从JDBC API的使用到JDK环境配置,再到jar文件的创建和泛型的理解,为初学者提供了一套全面的学习资源。理解和掌握这些知识点,将有助于Java开发者更好地进行...

    JDK 1.5的泛型實現(Generics in JDK 1.5)

    JDK 1.5的泛型實現(Generics in JDK 1.5) 1 侯捷觀點 JDK 1.5的泛型實現 — Generics in JDK 1.5 — 北京《程序員》 2004/09 台北《Run!PC》2004/09 作者簡介:侯捷,資訊教育、專欄執筆、大學教師...

    JDK1.5的泛型实现

    Java开发工具包(JDK)1.5引入了一项重大特性——泛型(Generics),它为编程带来了显著的类型安全性和代码复用性提升。泛型是Java语言设计的一次重要演进,使得程序员可以在定义集合类或者方法时指定元素的类型,...

    jdk1.5的泛型实现

    Java编程的泛型是JDK 1.5版本引入的一项重要特性,极大地提高了代码的类型安全性和重用性。泛型允许我们在定义类、接口和方法时声明参数化类型,这样在编译时期就能捕获类型错误,而不是等到运行时。这种特性在面向...

    Jdk5.0泛型

    **Jdk5.0泛型**是Java编程语言的一个重要特性,它于2004年随着Java Development Kit (JDK) 5.0的发布引入。泛型为Java提供了类型安全,允许开发者在编译时检查类型,避免了运行时的类型转换异常。这一特性极大地提高...

    JDK 5.0中的泛型类型学习

    JDK 5.0 中增加的泛型类型,是 Java 语言中类型安全的一次重要改进。但是,对于初次使用泛型类型的用户来说,泛型的某些方面看起来可能不容易明白,甚至非常奇怪。在本月的“Java 理论和实践”中,Brian Goetz 分析...

    jdk1.5的新特性泛型的实例代码

    Java开发工具包(JDK)1.5引入了一项重大改进,那就是泛型(Generics)。泛型是Java编程语言中的一个关键特性,它允许在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。通过泛型,...

    Jdk5.0泛型指南(转贴)

    博文链接:https://lkfnn.iteye.com/blog/33406

Global site tag (gtag.js) - Google Analytics