`
zy19982004
  • 浏览: 661821 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:251950
社区版块
存档分类
最新评论

Java泛型学习一:泛型术语

 
阅读更多

一.开篇

     泛型是我到目前为止觉得很难啃的硬骨头之一。我一直认为学习这些东西,所花费的时间和要达到的效果短期内是不成正比的,但从长远来看,要写出好的代码,这些基础必须掌握。这也是为什么我准备花一个月的时间,再次学习Java基础的原因。

 

二.泛型术语

  1. 泛型(Generic):适应于许多许多的类型。泛型类和泛型接口统称为泛型。比喻List<E>。
  2. 泛型类:一个类可以适应于许多许多的类型
  3. 泛型接口:一个接口可以适应于许多许多的类型。和泛型类没什么区别。
  4. 泛型方法:一个方法可以适应于许多许多的类型。比喻static <E> List<E> asList(E[] a)
  5. 原生态类型(raw type):不带任何实际类型参数的泛型名称。每一个泛型都有一个原生态类型,与List<E>相对应的原生态类型是List。
  6. 形式类型参数:既然一个类(或接口或方法)可以适应于许多许多的类型,那总该有一个东西来标识这个类型吧,就是形式类型参数。K键 V值 E异常 T类型 这些都是形式类型参数。
  7. 实际类型参数:形式类型参数的值,比喻String。
  8. 参数化的类型:比喻List<String>。
  9. 其它术语将在后文介绍。

 

三.泛型类和泛型方法

  1. 是否拥有泛型方法,与其所在的类是否是泛型没有关系。
  2. 泛型类里没有定义泛型方法想要的形式类型参数,泛型方法需要自己定义。
  3. 泛型类里定义了形式类型参数,泛型方法可以使用这些形式类型参数。
  4. 无论何时,只要你能做到,就应该使用泛型方法代替泛型类,缩写泛型的范围,使这个类的表达更加清楚。
  5. 泛型类里定义了形式类型参数,static方法不能使用这些形式类型参数,需要自己定义。
  6. 使用泛型类时,必须在创建对象的时候指定形式类型参数的值(即实际类型参数);而使用泛型方法的时候,通常不必指明形式类型参数的值,因为编译器会为我们找出具体的类型,这被称为“类型参数推断”。
  7. 类型推断只对赋值操作有效,对传递无效。编译器认为,调用泛型方法后的返回结果具体类型将由Object取代。可以通过显式的类型说明解决。
  8. 显式的类型说明:
  • 类.<实际类型参数...>method()
  • 对象.<实际类型参数...>method()
  • this.<实际类型参数...>method()

 

四.说明例子 

  1. 说明2356的例子
    package com.jyz.study.jdk.generic;
    
    /**
     * Java泛型里,static方法是无法访问泛型类的形式类型参数(T)的.
     * 需要自己定义
     * @author JoyoungZhang@gmail.com
     *
     */
    public class StaticMethodGeneric<T> {
    	
    //	compile error, can not access T
    //	public static T test1(T obj){
    //		return obj;
    //	}
    	
    	//泛型类里定义了形式类型参数,static方法不能使用这些形式类型参数,需要自己定义
    	public static <T> T test1(T obj){
    		return obj;
    	}
    	
    	//泛型类里定义了形式类型参数T,泛型方法可以使用这些形式类型参数
    	private T test2(T obj){
    		return obj;
    	}
    	
    	//泛型类里没有定义泛型方法想要的形式类型参数TT,泛型方法需要自己定义
    	private <TT> TT test3(TT obj){
    		return obj;
    	}
    	
    	public static void main(String[] args) {
    		//使用泛型方法的时候,通常不必指明形式类型参数的值,
    		//因为编译器会为我们找出具体的类型,这被称为“类型参数推断”。
    		System.out.println(StaticMethodGeneric.test1("sa"));
    		System.out.println(StaticMethodGeneric.test1(1));
    		//使用泛型类时,必须在创建对象的时候指定形式类型参数的值;
    		System.out.println(new StaticMethodGeneric<String>().test2("sa"));
    		System.out.println(new StaticMethodGeneric<Integer>().test2(1));
    	}
    	
    }
    
     
  2. 说明78的例子
    package com.jyz.study.jdk.generic;
    
    import java.util.HashMap;
    import java.util.Map;
    
    
    /**
     * GnericMethodReturnObject
     * 显式的类型说明
     * @author JoyoungZhang@gmail.com
     *
     */
    public class ExplicitTypeSpecification {
    	
    	static class NewCollections1{
    		public static <K, V> Map<K, V> map(){
    			return new HashMap<K, V>();
    		}
    	}
    	
    	class NewCollections2{
    		public <K, V> Map<K, V> map(){
    			return new HashMap<K, V>();
    		}
    	}
    	
    	public <K, V> Map<K, V> map(){
    		return new HashMap<K, V>();
    	}
    	
    	static void test1(Map<Integer, String> map){
    		
    	}
    	
    	public void main() {
    		//compile error, NewCollections.map() return Map<Object, Object>, but test1 requried Map<Integer, String>
    		test1(NewCollections1.map());
    		//compile ok. 等价于Map<Integer, String> map = NewCollections1.<Integer, String>map();
    		test1(NewCollections1.<Integer, String>map());
    		
    		//compile error, NewCollections.map() return Map<Object, Object>, but test1 requried Map<Integer, String>
    		test1(new NewCollections2().map());
    		//compile ok. 等价于Map<Integer, String> map2 = new NewCollections2().<Integer, String>map();
    		test1(new NewCollections2().<Integer, String>map());
    		
    		//compile error, this.map() return Map<Object, Object>, but test1 requried Map<Integer, String>
    		test1(this.map());
    		//compile ok. 等价于Map<Integer, String> map = this.<Integer, String>map();
    		test1(this.<Integer, String>map());
    	}
    	
    }
    
     

 

2
0
分享到:
评论

相关推荐

    java核心技术卷一:基础知识(第八版)英文原版

    《Java核心技术卷一:基础知识》是Java学习领域内的一本经典著作,该书第八版英文原版清晰且非扫描版,确保了读者能够获得高质量的阅读体验。本书由CAY S. HORSTMANN和GARY CORNELL共同编写,两位作者在计算机科学...

    java术语中英对照

    Java 术语中英对照是 Java 编程语言中的一种重要概念,它可以帮助程序员更好地理解 Java 编程语言的基本概念和技术。下面是 Java 术语中英对照的一些重要知识点: 1. 构建式(Constructor):在 Java 中,构建式是...

    最新版---JAVA专业术语集

    在编程世界中,Java是一种广泛使用的面向对象的编程语言,具有强大的功能和广泛的应用场景。"最新版---JAVA专业术语集"旨在帮助开发者深入理解Java编程中的..."JAVA专业术语集"将是你Java学习路上不可或缺的参考资料。

    JAVA核心技术

    3. Java 是一种非常容易学习的程序设计语言 4. Java 将成为适用于所有平台的通用性编程语言 5. Java 只不过是另外一种程序设计语言 6. 现在有了 C#,Java 过时了 7. Java 有专利,应该避免使用 8. Java 是解析型的,...

    JAVA术语中英文对照.docx

    【JAVA术语中英文对照】是Java开发者必备的基础知识,它涉及到编程语言的各个方面。下面将对部分关键术语...同时,随着技术的更新和发展,新的术语也会不断出现,保持学习和更新是成为一名优秀Java开发者的必备素质。

    java 术语 a-z

    2. **适配器模式 (adapter pattern)**:一种设计模式,允许不同接口或类之间进行通信,通过创建一个适配器类来转换不兼容接口。 3. **API (Application Programming Interface)**:一组预定义的函数、类和接口,供...

    Java-biji.rar_java biji

    "Java biji",这个术语可能指的是Java的笔记或者学习记录,而"Java-biji.rar"则是一个包含这些笔记的压缩文件。从描述来看,这是一份学霸的学习笔记,可以期待其中包含了深入且系统的Java学习资料。 首先,我们来...

    Java常用词汇中英文对照

    genericity是Java中的一种泛型机制,用于提供通用的解决方案。 process(行程/进程) process是Java中的一种进程,用于执行特定的任务。 thread(绪程/线程) thread是Java中的一种线程,用于执行特定的任务...

    自考java程序设计4737试卷及答案

    Java程序设计是计算机科学领域的重要组成部分,特别是在软件开发和互联网应用中扮演...对于“englishyufa”这个文件名,可能是英语语法或者Java中的英文术语练习,这对于理解Java相关的英文文档和技术文章也很有帮助。

    Java-Vocabulary-Handbook.rar_Vocabulary_com.java.handbook

    《Java词汇表速查手册》是一本专门为Java初学者设计的参考书籍,旨在帮助学习者快速掌握Java编程语言中的核心概念、术语和技术。这本手册深入浅出地讲解了Java编程语言的基础知识,是初学者建立扎实编程基础的理想...

    java_Glossary.rar_Java Glossar_java_Glossary

    这份“Java Glossary”压缩包提供了一个详细的Java词汇表速查手册,旨在帮助开发者迅速找到所需的概念解释,从而提高学习和工作效率。 文档“java_Vacability.doc”可能包含了关于Java能力、性能或内存管理方面的...

    Java术语表[借鉴].pdf

    2. **API(Application Programming Interface)**:一组预定义的类、接口和其他元素,允许开发者编写程序并与特定系统或库进行交互。 3. **反模式(Antipattern)**:在软件开发中,反模式是被广泛接受但效果不佳...

    Learn Java 12 Programming

    《学习Java 12编程》是一本针对Java SE 10、11和12的基础概念的逐步指导书籍,由Nick Samoylov撰写。这本书旨在帮助读者理解Java的核心概念,从初学者的角度出发,深入浅出地介绍Java编程语言。 在第1章“开始Java ...

    Java专业术语标准化规范表

    Java专业术语标准化规范表是Java开发领域中一个重要的参考文档,旨在确保开发团队之间的沟通准确无误,提高代码质量和可维护性。这份规范通常涵盖了Java编程语言中的核心概念、类库、API以及最佳实践的术语定义和...

    Java Cheat Sheet.pdf

    1. **Java术语**:包括类、对象、方法、变量、接口等。类是对象的蓝图,对象是类的实例;方法是代码块,用于执行特定任务;变量用于存储数据;接口定义了一组方法签名,用于实现多继承。 2. **基本类型与引用类型**...

    java细节总结 非常适合初学者学习

    - 继承:一个类可以从另一个类派生,继承其属性和方法。 - 封装:隐藏实现细节,只暴露公共接口。 - 多态:同一种行为可以通过不同方式表现,如方法重写。 - 抽象:不关注具体实现,只关注接口。 - 范型:泛型...

    thinking in java 中英文两本

    《Thinking in Java》是Bruce Eckel的经典著作,它是一本深度和广度并重的Java编程教程。这本书深受程序员喜爱,无论是初学者还是有经验的开发者,都能从中受益。中文和英文双语版本的提供,使得全球更多的人能无...

    java csdn java++

    【标题】"java csdn java++" 暗示了这个压缩包可能包含了与Java编程语言相关的学习资料或项目,而"java++"通常不是官方的术语,可能是用户用来表示进阶Java学习或者扩展Java技能的意思。CSDN(China Software ...

    Java开发者应当理解的专业术语编程开发技术共5页.pdf

    4. **继承(Inheritance)**:一个类可以继承另一个类的属性和方法,实现代码重用,体现"Is-A"关系。 5. **多态(Polymorphism)**:同一个接口可以有不同的实现方式,使得程序更灵活,增加代码的可扩展性。 6. **接口...

    JAVA术语中英文对照.doc

    【JAVA术语中英文对照】 ...这只是Java编程术语的一小部分,全面掌握这些概念对于深入理解Java和软件开发至关重要。学习和实践这些术语将有助于提高编程效率和代码质量,同时也为与其他开发者交流提供便利。

Global site tag (gtag.js) - Google Analytics