java泛型与object的比较
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
- public class Gen<T> {
- private T ob; // 定义泛型成员变量
- public Gen(T ob) {
- this.ob = ob;
- }
- public T getOb() {
- return ob;
- }
- public void setOb(T ob) {
- this.ob = ob;
- }
- public void showType() {
- System.out.println("T的实际类型是: " + ob.getClass().getName());
- }
- }
public class Gen<T> {
private T ob; // 定义泛型成员变量 public Gen(T ob) {
this.ob = ob;
} public T getOb() {
return ob;
} public void setOb(T ob) {
this.ob = ob;
} public void showType() {
System.out.println("T的实际类型是: " + ob.getClass().getName());
}
}
- public class GenDemo {
- public static void main(String[] args) {
- // 定义泛型类Gen的一个Integer版本
- Gen<Integer> intOb = new Gen<Integer>(88);
- intOb.showType();
- int i = intOb.getOb();
- System.out.println("value= " + i);
- System.out.println("----------------------------------");
- // 定义泛型类Gen的一个String版本
- Gen<String> strOb = new Gen<String>("Hello Gen!");
- strOb.showType();
- String s = strOb.getOb();
- System.out.println("value= " + s);
- }
- }
public class GenDemo {
public static void main(String[] args) {
// 定义泛型类Gen的一个Integer版本
Gen<Integer> intOb = new Gen<Integer>(88);
intOb.showType();
int i = intOb.getOb();
System.out.println("value= " + i);
System.out.println("----------------------------------");
// 定义泛型类Gen的一个String版本
Gen<String> strOb = new Gen<String>("Hello Gen!");
strOb.showType();
String s = strOb.getOb();
System.out.println("value= " + s);
}
}
- public class Gen2 {
- private Object ob; //定义一个通用类型成员
- public Gen2(Object ob) {
- this.ob = ob;
- }
- public Object getOb() {
- return ob;
- }
- public void setOb(Object ob) {
- this.ob = ob;
- }
- public void showTyep() {
- System.out.println("T的实际类型是: " + ob.getClass().getName());
- }
- }
public class Gen2 {
private Object ob; //定义一个通用类型成员
public Gen2(Object ob) {
this.ob = ob;
}
public Object getOb() {
return ob;
}
public void setOb(Object ob) {
this.ob = ob;
}
public void showTyep() {
System.out.println("T的实际类型是: " + ob.getClass().getName());
}
}
- public class GenDemo2 {
- public static void main(String[] args) {
- //定义类Gen2的一个Integer版本
- Gen2 intOb = new Gen2(new Integer(88));
- intOb.showTyep();
- int i = (Integer) intOb.getOb();
- System.out.println("value= " + i);
- System.out.println("---------------------------------");
- //定义类Gen2的一个String版本
- Gen2 strOb = new Gen2("Hello Gen!");
- strOb.showTyep();
- String s = (String) strOb.getOb();
- System.out.println("value= " + s);
- }
- }
public class GenDemo2 {
public static void main(String[] args) {
//定义类Gen2的一个Integer版本
Gen2 intOb = new Gen2(new Integer(88));
intOb.showTyep();
int i = (Integer) intOb.getOb();
System.out.println("value= " + i);
System.out.println("---------------------------------");
//定义类Gen2的一个String版本
Gen2 strOb = new Gen2("Hello Gen!");
strOb.showTyep();
String s = (String) strOb.getOb();
System.out.println("value= " + s);
}
}
java泛型与object的比较的更多相关文章
- Java泛型Object和?区别
在写spark streamming读取kafka latest offset的时候,有一下语句: Map<TopicAndPartition, Object> latestOffsets ...
- Java泛型中<?> 和 <? extends Object>的异同分析
相信很多人和我一样,接触Java多年,却仍旧搞不清楚 Java 泛型中 <?>和 <? extends Object>的相似和不同.但是,这应该是一个比较高端大气上档次的Que ...
- 浅析Java 泛型
泛型是JavaSE5引入的一个新概念,但是这个概念在编程语言中却是很普遍的一个概念.下面,根据以下内容,我们总结下在Java中使用泛型. 泛型使用的意义 什么是泛型 泛型类 泛型方法 泛型接口 泛型擦 ...
- Java:泛型基础
泛型 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚很多! 解决这种限制的 ...
- java泛型基础
泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 这种参数类型可以用在类.接口和方法的创建中, 分别称为泛型类.泛型接口.泛型方法. Ja ...
- 初识java泛型
1 协变数组类型(covariant array type) 数组的协变性: if A IS-A B then A[] IS-A B[] 也就是说,java中的数组兼容,一个类型的数组兼容他的子类类型 ...
- 【Java心得总结四】Java泛型下——万恶的擦除
一.万恶的擦除 我在自己总结的[Java心得总结三]Java泛型上——初识泛型这篇博文中提到了Java中对泛型擦除的问题,考虑下面代码: import java.util.*; public clas ...
- 【Java心得总结三】Java泛型上——初识泛型
一.函数参数与泛型比较 泛型(generics),从字面的意思理解就是泛化的类型,即参数化类型.泛型的作用是什么,这里与函数参数做一个比较: 无参数的函数: public int[] newIntAr ...
- 初识Java泛型以及桥接方法
泛型的由来 在编写程序时,可能会有这样的需求:容器类,比如java中常见的list等.为了使容器可以保存多种类型的数据,需要编写多种容器类,每一个容器类中规定好了可以操作的数据类型.此时可能会有Int ...
随机推荐
- Python获取%appdata%路径的方法
import osimport sys import winreg print(os.name)print(sys.getdefaultencoding())print(sys.version)pri ...
- webrtc自带client的视频引擎创建代码走读
src\webrtc\examples\peerconnection\client\conductor.ccbool Conductor::InitializePeerConnection()1 we ...
- 蓝桥杯 历届试题 PREV-2 打印十字图
历届试题 打印十字图 时间限制:1.0s 内存限制:256.0MB 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示: 对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并 ...
- Python中获得当前目录和上级目录
[转]原文地址:http://blog.csdn.net/liuweiyuxiang/article/details/71154346 获取当前文件的路径: from os import path d ...
- canvas图像以及剪切
图像篇: 代码: 1 /** 2 * Created by Administrator on 2016/1/28. 3 */ 4 function draw (id){ 5 var canvas = ...
- 基于OpenCV的火焰检测(一)——图像预处理
博主最近在做一个基于OpenCV的火焰检测的项目,不仅可以检测图片中的火焰,还可以检测视频中的火焰,最后在视频检测的基础上推广到摄像头实时检测.在做这个项目的时候,博主参考了很多相关的文献,用了很多种 ...
- json 工具处理类
package com.js.ai.modules.pointwall.util; import java.lang.reflect.Type; import java.net.URLDecoder; ...
- springmvc----demo2---a->b--bai
1.jsp 2.jsp 3.jsp LianxiAction: package com.etc.controller; import javax.servlet.http.HttpSession; i ...
- pipeline(管道的连续应用)
# -*- coding: utf-8 -*- """ Created on Tue Aug 09 22:55:06 2016 @author: Administrato ...
- Delphi 询问框 汉化
Delphi 询问框 汉化 d:\program files (x86)\embarcadero\studio\17.0\source\fmx\FMX.Consts.pas add this file ...