java 泛型 3 反射机制
简介
说实话,不太理解反射机制。
不过好像应该是对于特定对于泛型的接口。
code
package com.company;
import java.lang.reflect.*;
import java.util.*;
public class GenericReflectionTest {
public static void main(String[] args){
String name;
if(args.length > 0) name = args[0];
else{
try(Scanner in = new Scanner(System.in)){
System.out.println("Enter class name (e.g. java.util.Collections)");
name = in.next();
}
}
try{
// print generic info for class and public methods
Class<?> cl = Class.forName(name);
printClass(cl);
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
public static void printClass(Class<?> cl){
System.out.print(cl);
printTypes(cl.getTypeParameters(), "<", ",",">", true);
Type sc = cl.getGenericSuperclass();
if(sc != null){
System.out.print(" extends ");
printType(sc, false);
}
printTypes(cl.getGenericInterfaces(), " implements ", ",", "", false);
System.out.println();
}
public static void printMethod(Method m){
String name = m.getName();
System.out.print(Modifier.toString(m.getModifiers()));
System.out.print(" ");
printTypes(m.getTypeParameters(), "<", ",", ">", true);
printType(m.getGenericReturnType(), false);
System.out.print(" ");
System.out.print(name);
System.out.print("(");
printTypes(m.getGenericParameterTypes(), "", ", ", "", false);
System.out.println(")");
}
public static void printTypes(Type[] types, String pre, String sep, String suf, boolean isDefinition){
if(pre.equals(" extends ") && Arrays.equals(types, new Type[] {Object.class})) return;
if(types.length > 0) System.out.print(pre);
for(int i=0; i<types.length; i++){
if(i > 0) System.out.print(sep);
printType(types[i], isDefinition);
}
if(types.length > 0) System.out.print(suf);
}
public static void printType(Type type, boolean isDefinition){
if(type instanceof Class) {
Class<?> t = (Class<?>) type;
System.out.print(t.getName());
}else if(type instanceof TypeVariable){
TypeVariable<?> t = (TypeVariable<?>) type;
System.out.print(t.getName());
if(isDefinition){
printTypes(t.getBounds(), " extends ", " & ", "", false);
}
}else if(type instanceof WildcardType){
WildcardType t = (WildcardType) type;
System.out.print("?");
printTypes(t.getUpperBounds(), " extends ", " & ", "", false);
printTypes(t.getLowerBounds(), " super ", " & ", "", false);
}else if(type instanceof ParameterizedType){
ParameterizedType t = (ParameterizedType) type;
Type owner = t.getOwnerType();
if(owner != null){
printType(owner, false);
System.out.print(".");
}
printType(t.getRawType(), false);
printTypes(t.getActualTypeArguments(), "<", ", ", ">", false);
}else if(type instanceof GenericArrayType){
GenericArrayType t = (GenericArrayType) type;
System.out.print("");
printType(t.getGenericComponentType(), isDefinition);
System.out.print("[]");
}
}
}
result
java.util.Collections
class java.util.Collections extends java.lang.Object
java 泛型 3 反射机制的更多相关文章
- Java基础系列 - 泛型和反射机制
package com.test5; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * Java泛型和反射机 ...
- java的泛型与反射机制
什么是泛型? 泛型,即“参数化类型”.顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参) ...
- 深入理解Java中的反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...
- java-基于泛型和反射机制的通用比较器实现
一.前言 Java的比较器是用来对List集合进行排序用的,分为内部比较器和外部比较器两类 内部比较器:被排序的类要 implements Comparable 类,并实现compareTo方法. 外 ...
- 小白都能学会的Java注解与反射机制
前言 Java注解和反射是很基础的Java知识了,为何还要讲它呢?因为我在面试应聘者的过程中,发现不少面试者很少使用过注解和反射,甚至有人只能说出@Override这一个注解.我建议大家还是尽量能在开 ...
- java中的反射机制在Android开发中的用处
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...
- 黑马程序员——【Java高新技术】——反射机制
---------- android培训.java培训.期待与您交流! ---------- 一.概述 1.Java反射机制:是指“在运行状态中”,对于任意一个类,都能够知道这个类中的所有属性和方法: ...
- Java 中的反射机制
JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为ja ...
- JAVA类型信息——反射机制
JAVA类型信息——反射机制 一.反射机制概述 1.反射机制:就是java语言在运行时拥有的一项自我观察的能力,java通过这种能力彻底了解程序自身的情况,并为下一步的动作做准备. 2.反射机制的功能 ...
- 浅说Java中的反射机制(二)
写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...
随机推荐
- 『Plotly实战指南』--布局进阶篇
在数据可视化领域,Plotly的子图布局是打造专业级仪表盘的核心武器. 当面对多维数据集时,合理的子图布局能显著提升多数据关联分析效率,让数据的呈现更加直观和美观. 本文将深入探讨Plotly中子图布 ...
- EFCore Study(番外1)——单向导航属性
一.单向导航属性场景 1.比如公司OA系统有很多相关的审批流程,比如离职(Leave).请假(relex).加班,每个流程都有多级审批人,每个审批人都是User 一个人(User)--多个审批流程的多 ...
- [python] 基于WatchDog库实现文件系统监控
Watchdog库是Python中一个用于监控文件系统变化的第三方库.它能够实时监测文件或目录的创建.修改.删除等操作,并在这些事件发生时触发相应的处理逻辑,因此也被称为文件看门狗. Watchdog ...
- FastAPI与Tortoise-ORM模型配置及aerich迁移工具
title: FastAPI与Tortoise-ORM模型配置及aerich迁移工具 date: 2025/04/30 00:11:45 updated: 2025/04/30 00:11:45 au ...
- heapdump敏感信息提取工具-JDumpSpider(一) ,附下载链接
介绍 HeapDump敏感信息提取工具 在日常得渗透测试工作中,经常遇到spring actuator未授权漏洞,而且在实际过程中也常常会下载到heapdump这个文件.了解过这个文件的人知道,H ...
- 超越代码生成:AI 如何重塑软件开发全生命周期 (SDLC)? (需求、测试到部署)
引言:AI 不止写代码,软件开发的"全链路"变革已至 各位技术圈的朋友们,提到 AI 在软件开发中的应用,恐怕大多数人首先想到的还是 GitHub Copilot.DeepSeek ...
- js技术之“自定义包含方案”
调用 // 用于判断包含 function diaoyong(arr, str){ // 初始化 var sizes = ['L','XL','S','M']; for (var i = 0; i & ...
- 用 Tarjan 算法求解有向图的强连通分量
图论中的连通性概念是许多算法与应用的基础.当我们研究网络结构.依赖关系或路径问题时,理解图中的连通性质至关重要.对于不同类型的图,连通性有着不同的表现形式和算法解决方案. 无向图与有向图的连通性 在无 ...
- C# 基础问题汇集
(1)new List并不是null,可以正常的被遍历和AddRange class Program { public static void Main() { //var t = new test( ...
- vs2017试用期结束问题
Visual Studio 2017 企业版 Enterprise 更新码:NJVYC-BMHX2-G77MM-4XJMR-6Q8QF