整理好了!2024年最常见 100 道 Java基础面试题(四十三)
上一篇地址:整理好了!2024年最常见 100 道 Java基础面试题(四十二)-CSDN博客
八十五、Java 常用的元注解有哪些?
在Java中,元注解(Meta-Annotation)是指那些用于其他注解上的注解,它们提供了有关其他注解是如何工作的额外信息。Java 5引入了一些标准的元注解,用于定义如何使用注解以及注解的生命周期。以下是Java中一些常用的元注解:
-
@Retention:- 这个元注解指定了注解的保留策略,即注解信息应该在什么阶段可用。它有三个枚举值:
RetentionPolicy.SOURCE:注解仅在源代码中保留,在编译时丢弃。RetentionPolicy.CLASS:注解在源代码和字节码中都保留,在运行时丢弃。RetentionPolicy.RUNTIME:注解在源代码、字节码和运行时都保留。
- 这个元注解指定了注解的保留策略,即注解信息应该在什么阶段可用。它有三个枚举值:
-
@Target:@Target元注解用于指定其他注解可以应用于哪些Java元素上(如类、方法、变量等)。
-
@Inherited:- 当一个注解被标记为
@Inherited,它会被传递给子类,这意味着子类继承了父类的该注解。
- 当一个注解被标记为
-
@Documented:- 这个元注解用于指定注解是否应该被包含在JavaDoc中。
-
@Repeatable:- Java 8引入的
@Repeatable元注解允许同一个注解在一个元素上使用多次。它需要指定注解的容器类型,用于存储重复的注解实例。
- Java 8引入的
示例
import java.lang.annotation.*;@Retention(RetentionPolicy.RUNTIME) // 指定注解在运行时保留
@Target(ElementType.METHOD) // 指定注解可以应用于方法
@Inherited // 指定注解可以被子类继承
@Documented // 指定注解应该被包含在JavaDoc中
public @interface MyAnnotation {String value() default "default value";
}// 从Java 8开始,可以使用@Repeatable来定义可重复的注解
@Repeatable(MyAnnotations.class) // 指定重复注解的容器类型
public @interface MyRepeatableAnnotation {String value();
}// 定义一个存储重复注解的容器类型
public @interface MyAnnotations {MyRepeatableAnnotation[] value();
}
在这个示例中,MyAnnotation 是一个自定义注解,它使用了 @Retention、@Target、@Inherited 和 @Documented 元注解。MyRepeatableAnnotation 是一个可重复的注解,它使用了 @Repeatable 元注解。
注意事项
- 元注解本身也是注解,它们定义了其他注解的行为。
- 元注解不能用于除了注解以外的其他Java元素上。
总结
元注解是Java注解系统的重要组成部分,它们提供了关于注解如何工作和如何应用的额外信息。通过使用元注解,开发者可以更精确地控制注解的行为,从而创建更强大的框架和库。理解元注解的用途和如何使用它们对于开发自定义注解框架非常重要。
八十六、Java 泛型中的 T、R、K、V、E 分别指什么?
在Java泛型中,T、R、K、V、E 是类型参数的常见占位符,它们代表具体的类型,这些类型在编译时会被具体的类型所替换。这些占位符通常用于泛型类、泛型接口或泛型方法的定义中,以提供类型安全的集合操作和增强代码的可读性。下面是每个占位符的常见用途:
-
T(Type):T是最常用的泛型类型参数,通常代表“类型”(Type)。它可以用来指代任何类型,并且经常用于泛型类和泛型接口中。
public class GenericClass<T> {private T value; } -
R(Return Type):R通常用于泛型方法的返回类型。它代表方法返回值的类型。
public <R> R executeAndGetResult() {// ... } -
K(Key):K常用于表示键(Key)的类型,特别是在定义涉及键值对的泛型接口或类时,如Map<K, V>。
public interface KeyValue<K, V> {K getKey();V getValue(); } -
V(Value):V常用于表示值(Value)的类型,同样在涉及键值对的泛型结构中使用较多。
public class Pair<K, V> {private final K key;private final V value; } -
E(Element):E通常用于表示元素类型,如在泛型集合类中存储的具体对象类型。
public class ElementList<E> {private List<E> elements = new ArrayList<>(); }
注意事项
- 这些占位符通常用于泛型定义中,它们使得泛型类、接口和方法更加灵活和可重用。
- 占位符的选择主要基于代码的可读性和约定,它们本身没有特定的语义含义,可以互换使用,但为了保持可读性和清晰性,建议按照约定使用。
- 泛型的实际类型参数在创建实例或调用方法时指定。
示例
public class Example<T, V> {private T id;private V data;public Example(T id, V data) {this.id = id;this.data = data;}public static <K, V> Map<K, V> createMap() {return new HashMap<>();}
}
在这个示例中,Example 类使用了两个泛型参数 T 和 V,而 createMap 静态方法使用了 K 和 V 来创建一个 Map 实例。
总结
泛型中的 T、R、K、V、E 是类型参数的占位符,它们用于增强泛型类的类型安全性和灵活性。选择合适的占位符并遵循常见的编码约定,可以提高代码的可读性和可维护性。
相关文章:
整理好了!2024年最常见 100 道 Java基础面试题(四十三)
上一篇地址:整理好了!2024年最常见 100 道 Java基础面试题(四十二)-CSDN博客 八十五、Java 常用的元注解有哪些? 在Java中,元注解(Meta-Annotation)是指那些用于其他注解上的注解&…...
【TypeScript模块简介以及使用方法】
TypeScript模块简介 TypeScript中的模块(Modules)是代码的封装体,它们可以包含变量、函数、类和接口等。在TypeScript中,模块可以被其他模块引用和使用,从而实现代码的复用和模块化开发。 TypeScript支持两种模块系统…...
Offer必备算法38_贪心算法四_八道力扣题详解(由易到难)
目录 ①力扣56. 合并区间 解析代码 ②力扣435. 无重叠区间 解析代码 ③力扣452. 用最少数量的箭引爆气球 解析代码 ④力扣397. 整数替换 解析代码1_递归改记忆化搜索 解析代码2_贪心策略 ⑤力扣354. 俄罗斯套娃信封问题 解析代码1_动态规划(超时…...
java8 转对象,Java8转Map,Java8转Llist
1.准备数据 public static List<Persion> getData(){List<Persion> arrayList new ArrayList<>();arrayList.add(new Persion("李四","20","男"));arrayList.add(new Persion("王麻子","30","男&q…...
【Pytest官方文档翻译及学习】2.1 如何调用pytest
目录 2.1 如何调用pytest 2.1.1 指定要运行的测试 2.1.2 获取有关版本、选项名称、环境变量的帮助 2.1.3 分析测试执行时间 2.1.4 管理加载插件 2.1.5 调用pytest的其他方式 2.1 如何调用pytest 2.1.1 指定要运行的测试 Pytest支持几种从命令行运行和选择测试的方法。、…...
RabbitMQ的用途
RabbitMQ主要有四个用途,分别是应用解耦、异步提速、削峰填谷、消息分发。详情讲解如下: RabbitMQ介绍、解耦、提速、削峰、分发 详解、RabbitMQ安装 可视化界面讲解 1.应用解耦:提高系统容错性和可维护性 2.异步提速:提升用户体验…...
R语言软件安装及配置
1、下载 网址:www.r-project.org 1.1 下载R 选择download R 选择清华源进行下载 根据自己系统情况下载,我选择windows系统。 先选择base。 选择最新的版本下载。 1.2 下载RTools 下载好后,返回,选择RTools进入后,选…...
网络配置的加密存储
随着数据泄露事件的增加,扰乱了公司的正常工作周期,企业遭受了损失。事实上,数据泄露可以通过存储加密来控制,存储加密是防止黑客对网络数据库造成严重破坏的最有效方法之一。在网络配置管理器中,存储加密可用于存储设…...
你写代码,会关注时间复杂度吗?
虽然面试的时候总是被问到这个问题,但你写代码的时候,真的会想到这个问题吗?时间复杂度,说的当然不是你写的代码执行用了多长时间,而是代码执行语句的次数。 目录 每行代码都需要注意 计算方法 1 例如常量增长 2 …...
【连连国际注册/登录安全分析报告】
连连国际注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨…...
linux进阶高级配置,你需要知道的有哪些(10)-远程访问
1、ssh协议的功能 为客户机提供安全的shell环境(字符界面),用于远程管理 2、openssh的服务说明 服务名:sshd 重启服务:systemctl restart sshd 主配置文件:/etc/ssh/sshd/_config 端口号:tcp 2…...
不显示 表格 style=“display: none;“ 这个默认是不显示的
不显示 表格 style“display: none;” 这个默认是不显示的 取消就可以或者 $(‘#modifyStatusBtn’).show(); <div id"userInfoContainer" style"display: none;"></div>...
Bittensor怎么挖?手把手教你,使用bitget钱包
4月 Binance 上新 TheBittensorHub (TAO), 这个项目究竟做了什么可以令其在上大舞台前就已经在所有通证中排名前 30? 本文将深度解析。 该项目既不直接贡献数据,也不直接贡献算力。 而是通过区块链网络和激励机制,来对不同的算法进行调度和…...
领略Java内部类的“内部”
内部类有两种情况: (1) 在类中定义一个类(私有内部类,静态内部类) (2) 在方法中定义一个类(局部内部类,匿名内部类) 1、私有内部类 —— 在方法之间定义的内部类,非静态 我们首先看看类中内部类的两个特点: (1) 在外部…...
PHP 提取数组中的特定的值
需求: 前端展示: (1)之前的页面: (2)修改后的页面: 之前接口返回的数据 : 解决办法:提取tags 中的 ’约 的数组 添加到一个新的数组中去 1:一开…...
SpringBoot、JAVA中excel、rtf、doc转PDF
话不多说,直接上干货 // 官方文档的要求 无需理会public static boolean getLicense() {boolean result false;try {String s "<License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Wo…...
生信技能45 - 基于docker容器运行生信软件
1. 获取docker镜像 以运行xhmm CNV分析软件为例。 # 搜索仓库镜像 sudo docker search xhmm# 拉取镜像 sudo docker pull ksarathbabu/xhmm_v1.0# 启动镜像,非后台 sudo docker run -it ksarathbabu/xhmm_v1.0 /bin/bash # -i: 交互式操作。 # -t: 终端。 # ksarathbabu/xhmm…...
算法训练营第63天|LeetCode 84.柱状图中最大的矩形
完结!撒花! LeetCode 84.柱状图中最大的矩形 题目链接: LeetCode 84.柱状图中最大的矩形 代码: class Solution { public:int largestRectangleArea(vector<int>& heights) {heights.insert(heights.begin(),0);he…...
python跟C++选哪个?
选择使用Python还是C取决于你的具体需求和项目背景。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战。如果你渴望学习编程,不妨点个关注,给个评论222,私信22,我在后台发给你。 在通信工程行业…...
速锐得深入解析吉利几何CAN总线数据通信网络的拓扑层级框架技术
在现代汽车工业中,车辆的电子控制单元(ECU)之间的通信至关重要。这种通信大多通过控制器局域网络(CAN)总线实现,它是德国BOSCH公司于20世纪80年代初开发的一种串行数据通信协议。随着技术的不断进步&#x…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
Xcode 16 集成 cocoapods 报错
基于 Xcode 16 新建工程项目,集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...
