整理好了!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…...
MultiFunPlayer完整指南:3分钟学会设备与媒体完美同步,打造沉浸式娱乐体验
MultiFunPlayer完整指南:3分钟学会设备与媒体完美同步,打造沉浸式娱乐体验 【免费下载链接】MultiFunPlayer flexible application to synchronize various devices with media playback 项目地址: https://gitcode.com/gh_mirrors/mu/MultiFunPlayer …...
[物联网入门实战] 从零搭建C51最小系统:Proteus仿真点亮LED全流程解析
1. 为什么选择C51最小系统入门物联网? 很多刚接触物联网开发的朋友都会遇到一个难题:硬件成本高、调试复杂、学习曲线陡峭。我当年自学嵌入式时,烧坏过好几块开发板,后来发现用Proteus仿真C51最小系统是最稳妥的入门方式。这套组合…...
Python锚点链接解析利器pyanchor:高效处理HTML/Markdown文档内部链接
1. 项目概述:一个Python实现的锚点链接解析利器最近在整理一个大型文档项目时,遇到了一个挺头疼的问题:我需要从成千上万个Markdown文件中,批量提取所有指向文档内部特定章节的锚点链接,并验证这些链接是否有效。手动操…...
AI写专著全攻略:从选题到完稿,AI工具帮你快速完成20万字专著!
学术专著的严谨性必须依靠大量的数据和资料,但资料的搜集和数据的整合却是写作中最为繁琐且耗时的部分。研究人员需要全面地收集国内外的前沿文献,这不仅包括确认文献的权威性和相关性,还有追溯原始出处,避免二次引用时的错误&…...
FFXIV TexTools:终极《最终幻想14》模组管理完全指南
FFXIV TexTools:终极《最终幻想14》模组管理完全指南 【免费下载链接】FFXIV_TexTools_UI 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_TexTools_UI FFXIV TexTools 是一款为《最终幻想14》玩家量身打造的开源模组管理框架,让游戏外观定…...
云原生技能图谱:构建开发者能力模型与学习路径
1. 项目概述:一个面向云原生时代的技能图谱仓库最近在整理团队内部的技术分享材料时,我偶然发现了一个在开发者社区里讨论度颇高的开源项目:prevu-cloud/skills。乍一看这个名字,你可能会觉得它只是一个普通的“技能列表”或者“学…...
AI赋能Git提交:aicommit2如何用LLM自动生成规范提交信息
1. 项目概述:从命令行到智能提交的进化在团队协作开发中,提交信息(Commit Message)的质量直接关系到项目的可维护性。一条清晰、规范的提交信息,就像给代码变更打上了一个精准的标签,能让团队成员ÿ…...
FastbootEnhance:面向Windows用户的终极Fastboot工具箱与Payload提取器指南
FastbootEnhance:面向Windows用户的终极Fastboot工具箱与Payload提取器指南 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance FastbootE…...
Linux发布前检查实战指南
Linux发布前检查实战指南 本文面向具备一定 Linux 基础的技术人员,围绕发布前检查展开,重点讨论依赖确认、容量检查和回滚准备。在中级运维和系统管理工作中,这类主题常常与配置变更、资源状态、权限边界、自动化任务和业务影响交织在一起&a…...
如何通过DLSS版本管理工具提升30%游戏性能:实战指南
如何通过DLSS版本管理工具提升30%游戏性能:实战指南 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款开源游戏性能优化工具,专门用于管理DLSS、FSR和XeSS动态库版本。你是否曾…...
