avatar

十六小站

欢迎来到我的个人主页! 期待与您分享我的经验与故事,一起探索技术的无穷可能!

  • 首页
  • NAS专题
  • 关于
Home 泛型踩坑
文章

泛型踩坑

Posted 2024-04-2 Updated 2024-10- 19
By 十六
5~6 min read

泛型是一种在编程语言中用来创建可重用代码的机制。它允许您编写函数、类、接口等,而不需要提前指定具体的数据类型,从而实现代码的通用性和灵活性。通过使用泛型,您可以编写更加通用、安全和易于维护的代码。

1. 泛型的定义

泛型是一种参数化类型的概念,允许您在编写代码时定义类、接口或方法可以操作的数据类型。通过泛型,您可以编写通用的代码,使其能够适用于多种数据类型,而不需要为每种数据类型都编写特定的代码。

2. 泛型的优势

代码重用性:通过泛型,您可以编写一次代码,然后在多种数据类型上重复使用,避免了重复编写类似的代码。 类型安全:泛型能够在编译时进行类型检查,避免了在运行时出现类型转换错误,提高了代码的可靠性。 减少代码冗余:使用泛型可以减少冗余代码的编写,使代码更加简洁和易于维护。 增强代码的可读性和可维护性:泛型代码通常更具有可读性,因为它们清晰地表明了代码的意图和用途。

3. 泛型的应用场景

集合类:Java中的集合类(如List、Set、Map等)都使用了泛型,使得集合能够存储特定类型的元素。 类和接口:您可以定义泛型类和接口,以便在实例化时指定具体的类型。 方法:泛型方法允许您在方法中使用泛型类型,从而实现更通用的方法。

4. 泛型的工作原理

在Java中,泛型是通过类型擦除来实现的,即在编译时会擦除泛型类型信息,将泛型类型替换为其边界类型(或Object类型)。这样可以确保向后兼容性,并在运行时不会保留泛型类型信息。

5. 踩坑

理解了以上知识后,我们进入本文的重要环节。先来说下博主遇到的问题。先上代码:

/**
*接口
**/
public interface MenberService<T> {
List<T> search(Class cls, SearchRequest searchRequest);
public int deleteBatch(List<String> ids);
}
/**
*实现类
**/
public class MenberServiceImpl implements MenberService {
List<T> search(Class cls, SearchRequest searchRequest){
//此处省略了方法体
return null;
}
public int deleteBatch(List<String> ids){
//此处省略了方法体
return 0;
}
}

代码看上去是没什么问题,但是如果在开发工具中就会看到实现类报错了, file 报错中可以看出由于泛型类型未被正确指出,导致入参中的泛型类型被擦除后也无法被编译器识别。

5. 解决方法

在实现类中需要指明实现类中的泛型类型,因为T是一个泛指,在编译后会被替换成实际的类型。这里我们先指定成Object,方法如下

/**
*实现类
**/
public class MenberServiceImpl implements MenberService<Object> {
List<T> search(Class cls, SearchRequest searchRequest){
//此处省略了方法体
return null;
}
public int deleteBatch(List<String> ids){
//此处省略了方法体
return 0;
}
}

这样,编译器是可以直达我们类中的泛型为Object,所以在方法的入参中我们是可以指定其他类型的泛型。

菜鸟入坑
Java
License:  CC BY 4.0
Share

Further Reading

Apr 1, 2025

在WEB中子线程可以访问Request上下文

使用RequestContextHolder获取Request和Session对象 在JavaWeb中,可以通过RequestContextHolder类来获取当前线程的Request和Session对象。具体实现方式是先获取ServletRequestAttributes对象,再从中提取Reque

Dec 31, 2024

OpenSearch常用脚本

给数据添加属性 POST /your_index/_update_by_query { "script": { "source": "ctx._source.newField = 'new_value'", "lang": "painless" }, "query": {

Oct 27, 2024

HTML编译成应用程序

如果你想将 HTML 网页包装成 Windows 应用程序,可以使用 Electron。下面是详细步骤: 使用 Electron 创建 Windows 应用程序 1. 安装 Node.js 和 npm - 首先确保你安装了 Node.js 和 npm(Node.js 的包管理器)。你可以从 [Nod

OLDER

OpenSearch集成

NEWER

node版本管理工具

Recently Updated

  • Onlyoffice编译
  • K6+Playwright实现并发测试
  • 简单规则引擎
  • 在WEB中子线程可以访问Request上下文
  • onlyoffice配置

Trending Tags

Java Docker 前端 中间件 数据库 群晖 unraid

Contents

©2025 十六小站. 陕ICP备2023009742号-2