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

本文共 1778 字,大约阅读时间需要 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/

你可能感兴趣的文章
Netty中集成Protobuf实现Java对象数据传递
查看>>
Netty事件注册机制深入解析
查看>>
Netty原理分析及实战(四)-客户端与服务端双向通信
查看>>
Netty客户端断线重连实现及问题思考
查看>>
Netty工作笔记0006---NIO的Buffer说明
查看>>
Netty工作笔记0007---NIO的三大核心组件关系
查看>>
Netty工作笔记0011---Channel应用案例2
查看>>
Netty工作笔记0013---Channel应用案例4Copy图片
查看>>
Netty工作笔记0014---Buffer类型化和只读
查看>>
Netty工作笔记0020---Selectionkey在NIO体系
查看>>
Vue踩坑笔记 - 关于vue静态资源引入的问题
查看>>
Netty工作笔记0025---SocketChannel API
查看>>
Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
查看>>
Netty工作笔记0050---Netty核心模块1
查看>>
Netty工作笔记0057---Netty群聊系统服务端
查看>>
Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
查看>>
Netty工作笔记0063---WebSocket长连接开发2
查看>>
Netty工作笔记0070---Protobuf使用案例Codec使用
查看>>
Netty工作笔记0077---handler链调用机制实例4
查看>>
Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
查看>>