博客
关于我
泛型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/

你可能感兴趣的文章
pandas,python - 如何在时间序列中选择特定时间
查看>>
Spring 框架之 AOP 原理深度剖析
查看>>
Pandas:如何按列元素的组合分组,以指示基于不同列的值的同现?
查看>>
Pandas:将一列与数据帧的所有其他列进行比较
查看>>
PANDA:基于多列对数据表的行运行计算,并将输出存储在新列中
查看>>
PandoraFMS 监控软件 SQL注入漏洞复现
查看>>
PandoraFMS 监控软件 任意文件上传漏洞复现
查看>>
Papyrus项目常见问题解决方案
查看>>
Parallel.ForEach使用示例
查看>>
Parallel.ForEach的基础使用
查看>>
parallels desktop for mac安装虚拟机 之parallelsdesktop密钥 以及 parallels desktop安装win10的办公推荐可以提高办公效率...
查看>>
parallelStream导致LinkedList遍历时空指针的问题
查看>>
Parameter ‘password‘ not found. Available parameters are [md5String, param1, username, param2]
查看>>
ParameterizedThreadStart task
查看>>
Spring security之管理session
查看>>
paramiko模块
查看>>
param[:]=param-lr*param.grad/batch_size的理解
查看>>
spring mvc excludePathPatterns失效 如何解决spring拦截器失效 excludePathPatterns忽略失效 拦截器失效 spring免验证拦截器不起作用
查看>>
Spring Cloud 之注册中心 EurekaServerAutoConfiguration源码分析
查看>>
Parrot OS 6.2 重磅发布!推出全新 Docker 容器启动器
查看>>