简介

说实话,不太理解反射机制。

不过好像应该是对于特定对于泛型的接口。

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 反射机制的更多相关文章

  1. Java基础系列 - 泛型和反射机制

    package com.test5; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * Java泛型和反射机 ...

  2. java的泛型与反射机制

    什么是泛型? 泛型,即“参数化类型”.顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参) ...

  3. 深入理解Java中的反射机制

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...

  4. java-基于泛型和反射机制的通用比较器实现

    一.前言 Java的比较器是用来对List集合进行排序用的,分为内部比较器和外部比较器两类 内部比较器:被排序的类要 implements Comparable 类,并实现compareTo方法. 外 ...

  5. 小白都能学会的Java注解与反射机制

    前言 Java注解和反射是很基础的Java知识了,为何还要讲它呢?因为我在面试应聘者的过程中,发现不少面试者很少使用过注解和反射,甚至有人只能说出@Override这一个注解.我建议大家还是尽量能在开 ...

  6. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  7. 黑马程序员——【Java高新技术】——反射机制

    ---------- android培训.java培训.期待与您交流! ---------- 一.概述 1.Java反射机制:是指“在运行状态中”,对于任意一个类,都能够知道这个类中的所有属性和方法: ...

  8. Java 中的反射机制

    JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为ja ...

  9. JAVA类型信息——反射机制

    JAVA类型信息——反射机制 一.反射机制概述 1.反射机制:就是java语言在运行时拥有的一项自我观察的能力,java通过这种能力彻底了解程序自身的情况,并为下一步的动作做准备. 2.反射机制的功能 ...

  10. 浅说Java中的反射机制(二)

    写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...

随机推荐

  1. Python3循环结构(二) while循环

    Python3 while循环 当循环次数无界时通常会使用while循环. 1.使用while循环输出九九乘法表 i=1 while i < 10: j = 1 while j < i + ...

  2. 移动web开发——flex布局

    目录 1.0传统布局和flex布局对比 1.1传统布局 1.2 flex布局 1.3 建议 2.0 flex布局原理 3.0 父项常见属性 3.1 flex-direction设置主轴的方向 3.2 ...

  3. 【记录】Prompt模板|作为甲方怎么清晰专业地描述自己的需求(又名“乙方,给你的甲方扔个GPT解放自己吧”)

    这篇Prompt摘抄并修改自朋友送给我的书的第49页5.2.3让ChatGPT构建提示,质量挺不错,支持一下她的博客:[好书推荐2]AI提示工程实战:从零开始利用提示工程学习应用大语言模型. 书长这样 ...

  4. [HTB] 靶机学习(一)Heal

    [HTB] 靶机学习(一)Heal 概要 学习hackthebox的第一天,本人为初学者,将以初学者的角度对靶机渗透进行学习,中途可能会插入一些跟实操关系不大的相关新概念的学习和解释,尽量做到详细,不 ...

  5. 设计模式之“状态模式(State)”(未完整)

    一.状态模式(State) 状态模式是当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 二.状态模式的作用 状态模式主要解决的是当控制一个对象状态转换条件表达式过于复杂时的情况. ...

  6. Python基础 - 多线程(上)

    前面对 进程 一点认识, 通俗理解, 进程是操作系统(OS)进行资源调度分配的基本单元. 每个程序的至少就一个进程在OS中被"监控"着的哦. 然后围绕着多进程, 用消息队列共享全局 ...

  7. MFC窗口闪烁问题

    本文引自:<VC窗口闪烁问题的解决> 概述 一般的windows复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小时候出现闪烁. 闪烁产生的原因 原因一: 如 ...

  8. RPC实战与核心原理之安全体系

    安全体系:如何建立可靠的安全体系? 回顾 异步化".调用方利用异步化机制实现并行调用多个服务,以缩短整个调用时间:而服务提供方则可以利用异步化把业务逻辑放到自定义线程池里面去执行,以提升单机 ...

  9. @FeignClient注解配置局部超时时间、OkHttp长连接和SocketTimeoutException异常解决办法

    问题描述:open feign配置OKhttp调用远程API,连续调用次数较少时,一切正常,次数非常多时(例如,连续请求600次)就抛出java.net.SocketTimeoutException: ...

  10. Java中判断某一字符串是否包含数字、字母和中文

         在Java中判断某一字符串是否为纯英文.纯数字.英文和数字的组合等时,通常使用正则str.matches匹配,告诉这个字符串是否与给定的正则表达式匹配.  各种字符的unicode编码的范围 ...