博客
关于我
泛型Generic
阅读量:660 次
发布时间:2019-03-15

本文共 1740 字,大约阅读时间需要 5 分钟。

波客体 - 泛哪jenisim

泛型编程是一种编程范式,允许程序在运行时确定具体的数据类型,而不是在编译时就固定为某一类型。这种灵活性使它在处理不同类型数据时更加高效和安全。

不使用泛型的弊端

虽然不使用泛型的程序在实现上比较简单,但也有其弊端。例如,使用Object类来存储不同类型的数据:

ArrayList list = new ArrayList();list.add("Hello");    // 添加字符串list.add(100);       // 添加数字list.add(true);       // 添加布尔

当你尝试访问这些数据时,需要手动向下转型:

Object object = list.get(i);if (object instanceof String) {    String s = (String) object;    System.out.println(s);} else if (object instanceof Integer) {    System.out.println(((Integer) object).intValue());} else if (object instanceof Boolean) {    System.out.println(((Boolean) object).booleanValue());}

这种方法需要额外的转换,容易出错,调试困难。

什么时候使用泛型

在需要处理可变类型或需要保持代码的灵活性时,使用泛型是更好的选择。例如,以下场景中使用泛型可以避免问题:

例如,创建一个能够存储不同类型数据的容器:

public class MyList
{ private T t; public void set(T t) { this.t = t; } public T get() { return t; }}

一个具体的示例

假设我们有一个泛型容器:

MyList
myList = new MyList<>();myList.set("张三"); // 传递字符串String s = myList.get(); // 返回String类型// s就可以直接使用String的方法而无需转换

因此,调用时更加灵活高效,避免了类型转换的麻烦和潜在的异常风险。

泛哪泛型接口

泛型还可以应用于接口。假设定义了一个泛型接口:

public interface MyInterface
{ void method(T t);}

实例可以是:

  • 非泛型实现:
public class MyInterfaceImpl implements MyInterface
{ @Override public void method(String s) { System.out.println(s); }}
  • 泛哪实现:
public class MyInterfaceImpl2
implements MyInterface
{ @Override public void method(T t) { System.out.println(t); }}

应用场景:

MyInterfaceImpl obj = new MyInterfaceImpl();obj.method("Hello");MyInterfaceImpl2
numImpl = new MyInterfaceImpl2<>();numImpl.method(42);numImpl.method("数字");

结论

通过上述例子可以看见,使用泛型可以显著提升代码的灵活性和可维护性。在调用时无需手动转换类型,提高了效率和代码的可读性,同时降低了潜在的异常风险。作为一名开发者,了解和使用泛型能够让你在处理不同类型数据时更加高效和从容。

转载地址:http://mljmz.baihongyu.com/

你可能感兴趣的文章
python3简单使用requests 用户代理,cookie池
查看>>
Python3组播通信编程实现教程(发送者+接收者)
查看>>
Python3编写网络爬虫10-数据存储方式三-CSV文件存储
查看>>
python3读取redis返回数据带有'b'的问题
查看>>
Python3连接MySQL
查看>>
Python关于isinstance函数的解析 | 附Demo(全)
查看>>
Python3:setup.py:完成所有任务的PIP安装(Build_ext+Install)
查看>>
python4.0 gil_Python 并发编程系列--1、浅谈GIL历史及对多线程的影响
查看>>
python60行绘图程序_天底下最简单的QT画图板,就一个类,60行代码
查看>>
Python: AES加密与解密
查看>>
Python: Range() 最大尺寸;动态的还是静态的?
查看>>
Python: Windows下用 multiprocessing 的深坑
查看>>
python:Could not find platform independent libraries <prefix>解决方法
查看>>
Python:datetime tzinfo 时区名称文档
查看>>
Python:deepcopy(list) vs new_list = old_list[:]
查看>>
Python:Google API - 从消息中获取 mimeTypes
查看>>
Python:Google API - 从消息中获取 mimeTypes
查看>>
Python:subprocess.call,stdout to file,stderr to file,在屏幕上实时显示stderr
查看>>
Python:TypeError:无法连接“str“和“int“对象
查看>>
Python:XPath 在 ElementTree 中不可用
查看>>