俄罗斯VS沙特直播

我演的《唐伯虎点秋香2》不好?导演瞎删戏,反正这锅我不背。感觉挺祝福队友的,然而她说自己一进团就被人各种背后造谣?是谁???粉丝希望她说清楚,她回应了,说当初在队里,李艺彤怕她出风头,不仅不同意她写的歌词,还造谣她打人害她被处罚?有人问李艺彤有这么大影响力?她的回答↓接着爆料李艺彤叫队友洗脚婢,天啦撸,行为很目中无人了……有人问到了卡黄CP…………她回复说,组和拆都是因为利益利益,友情什么不存在的还指责李艺彤每天捧着手机不肯放,夸黄婷婷是踏实工作的人。它不单纯是游戏结束了就完了,而是在游戏结束后,整个剧本背后有一些我们值得反思的东西。“通过各类线索,找到真凶”这是剧本推理游戏的最终目的。
返回首页

Java泛型总结大全

时间:2014-08-20 21:28来源:知行网www.youyuan-chem.com 编辑:麦田守望者

Java泛型是 jdk5.0 以后的版本才有的特性,也是 Sun 公司将 JDK1.5. 更名为 JDK5.0 的一个重要原因,因为历时 5 年的开发,是 JDK1.5 的功能更为健全和完善。

重用度高,安全系数高是Java 的追求的目标,而泛型的运用正是这一个内容的重要体现。在学习 Java 的过程当中 Java 泛型感觉有些晦涩难懂。起先以为自己的泛型学的还不错,可是在很长一段时间研究 Java 泛型毫无进展的情况下,开始有些崩溃了,于是硬着头皮看啊看,终于觉得有点感觉了,所以,今天在这里总结一些 Java 泛型的一些知识,希望以后自己以后开发生涯中能够用上今天的经验,写下来的原因确实很多,我不想在遇到同样的问题而束手无策,而且记忆了有时候并不是十分的可靠,所以我准备了 4 天的时间来写这篇总结。希望能详尽的表述出来,这个非常适用的机制,并方便以后读到这篇文章的读者,能够提出你们对泛型的一些看法,而不仅仅是一个“顶”字,我也相信你们有比这更好的学习泛型的经验和教训。

 

什么是泛型? 泛型实质上是叫做泛型程序设计。运用泛型意味着编写的代码可以被很多类型不同的对象所 重用 。

为什么使用泛型?泛型是一种全新的程序设计手段,使用泛型的机制编写的程序代码,要比那些杂乱的使用Object 变量然后进行强制类型转化的代码明显的具有以下特点: 1 更好的安全性 2 更好的可读性。

 

了解这个两个问题才能从根本上了解泛型的好处,也才能真正的了解甚至熟练的运用Java 泛型。

先前受到c++ 模板的影响,所以一时还难以转过弯来。后来发现 C++ 的模板比 Java 的泛型做得好一些。一般情况下, Java 的特点是“懒加载”(源自 Hibernate 中的 lazy 这里只是为了说明),即运行时才动态的调用方法和生成新的类(除了 static 块和域)。所以 Java 并不知道你所指的泛型到底是什么类型。 Java 是一门纯面向对象的语言,所有的东西必须用类来表示(除了基本的数据类型外),所以类型可以泛化但是不能不让编译器始终不知道你所要泛化的东西是何种类型。因此有一定 C++ 基础的人千万要将模板和 Java 的泛型区分开来。

泛型最初的目的是希望类或者方法能够具备更加广泛的表达能力。了解泛型最主要的是要了解泛型的边界,以及它可以用来做什么,不能够做什么。我想这点是最重要的。

在此之前,我们用的最多的就是多态。所以经常性的让类来持有Object 类型的对象。

package cn.ccsu.cooole.generics;

/**

* @author CoolPrince

* 这里讲的是一个类持有某一个类的对象本案例中用的是代理的机制

* 即Holder_1类持有AObject的对象ao;

* 这个通常情况下只能持有单个对象的类

*/

public class Holder_1 {

private AObject ao = null ;

public Holder_1(AObject ao) {

this . ao = ao;

}

AObject get(){ return ao ; }

}

class AObject{}

在举个例子(解释详见注释部分):

package cn.ccsu.cooole.generics;

/**

*

* @author CoolPrince

* 描述:此案例讲的是以前我们所用到过的动态绑定,此时只用了一个Holder_2的对象

* 就实现了存储两个不同的类型的对象的功能。

* 有些情况下我们主要运用泛型是将其运用到容器当中,告诉指定容器要持有什么样类型 * 的对象 由编译器来保证类型的正确性,举个简单的例子 List <Integer> list =

* new ArrayList <Integer> (); 此时前后的类型都为Integer才能保证数据的正确性.

*/

public class Holder_2 {

private Object a = null ;

public Holder_2(Object a ) { this . a = a; }

public void set(Object a){ this . a = a; }

public Object get(){ return a ; }

public static void main(String[] args) {

Holder h = new Holder();

Holder_2 h2 = new Holder_2(h);

print ( "Test Holder result is :" + h2.get());

String str = new String( "Name is /" String/"" );

h2.set(str);

print ( "Test String result is :" + h2.get());

 

}

private static void print(Object o){

System. out .println(o);

}

}

class Holder{

public String toString(){ return "Name is /"Holder/"" ;}

}

以上便是使用Object 数据类型的来进行动态绑定,但是与其指定为 Object 还不如暂时不指定类型,然后决定具体使用何种类型。

下面就真正开始归纳泛型的基本用法和简要的总结:

 

package cn.ccsu.cooole.generics;

/**

*

* @author CoolPrince

* @param <T>

* 泛型示例 主要是看简单泛型的基本语法格式

*/

public class Holder_3<T> {

 

public Holder_3(T a){ this . a = a;}

public T get(){ return a ;}

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

 

 

public static void main(String[] args) {

Holder h = new Holder();

Holder_3<Holder> h3 = new Holder_3<Holder>(h);

System. out .println( h3 );

Holder hh = h3 .get();

System. out .println(hh);

/* h3 .set("cooole"); //h3已经限定了其类型为Holder所以其他类型

h3 .set(new Integer(1));//比如String、Integer还是其他非Holder类 型

都是不允许传进来类型参数的

*/

}

private T a ;

}

Java泛型的核心概念:告诉编译器像使用什么类型,然后编译器帮你处理一切细节。在使用泛型时只需要指定它们的名称和类型即可。

 

在通常的系统开发当中,我们一定会遇到经常使用一次方法调用,就能返回多个对象的情况。但是return 只能返回一个对象。因此解决办法就就是:创建一个对象用这个对象来持有想要返回的多个对象。当然在每次需要的时候就会专门创建这样的类。万一系统庞大,那么就会出现各种各样的问题,类就会过于庞大,同时也不能很好的体现 OOP 的思想。有一种好的设计思想就是利用泛型来一次性来解决问题,同时也可以利用泛型来在编译期间进行检查确保类型的安全,同时泛型也不是十全十美的会有一定的性能下降。

在学习泛型的时候要注意到元组的问题,实质上在通常的情况下可以这样来理解,元组就是类型的列表外加<> 。

 

泛型也可以运用到接口上这样的接口称为泛型接口。

public interface GenericsInterface <T> {T method();} 是被允许的。

Java泛型“基本类型无法作为类型参数”的局限性已经是众所周知了,不过从 J2SE5

就具备了自动打包和解包的功能,所以基本的数据类型会也应该转换为对应的对象类型,再进行下一步的处理。

 

泛型到现在的示例为止都是运用于整个类。但是从实际开发的过程中的规范或者说是好的习惯来看, 在能力的范围内,能用泛型方法代替泛型类的就应该尽量代替 。所以在这里就要讲到泛型方法的基本语法结构和一些必须非常熟悉的基本原理,这样才能站在更高的层次上来理解Java 泛型。

先介绍语法:

package cn.ccsu.cooole.generics;

 

/**

* @author CoolPrince

* 本案例的输出情况:

* SampleName: String | Name: java.lang.String

* SampleName: Float | Name: java.lang.Float

* SampleName: Integer | Name: java.lang.Integer

* SampleName: Integer | Name: java.lang.Integer

* 从输出情况可以了解到两个重要的点:

* 1:从i0和i1这两个地方我们就能很清晰地看到: Java泛型“基本类

* 型无法作为类型参数”的局限性已经是众所周知了,不过从J2SE5就具

* 备了自动打包和解包的功能,所以基本的数据类型会也应该转换为对应

* 的对象类型,再进行下一步的处理。

* 2:定义泛型方法只需要将泛型 参数列表 至于返回值之前

*/

public class GenericsMethods {

// 简单的示例输出对应的类名

public <T> void method(T x) {

System. out .println( "SampleName: " + x.getClass().getSimpleName()

+ " | Name: " + x.getClass().getName());

}

 

public static void main(String[] args) {

GenericsMethods gm = new GenericsMethods();

String s = "cooole" ;

int i0 = 23;

Integer i1 = 13;

gm.method(s);

gm.method(10.F);

gm.method(i0);

gm.method(i1);

}

 

}

值得特别注意的是: 如果static 方法需要使用泛型能力,就必须使其成为泛型方法。

当使用泛型类时,必须在创建对象的时候指定参数的值,而使用泛型方法时,通常不必指明参数的类型,因为编译器有个功能叫做:类型参数推断,此时编译器会为我们找出具体的类型。

类型参数推断举例:

package cn.ccsu.cooole.generics;

 

import java.util.ArrayList;

import java.util.HashMap;

import java.util.LinkedList;

import java.util.List;

import java.util.Map;

 

/**

* @since 2009 - 7

* @author CoolPrince

顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
标签(Tag):Java JAVA实例教程 JAVA基础教程 Java源代码 Java技巧
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
猜你感兴趣