随笔 - 1162  文章 - 0  评论 - 16  阅读 - 59万 

一、通过反射获取运行时类的完整结构

   Class  类中提供了大量实例方法来获取该 Class 对象所对应类的详细信息, Class 类大致包含如下几种方法,下面每种方法都可能包含多个重载的版本。

    如:包、修饰符、类名、父类、父接口、注解、及成员(属性、构造器、方法)等。

    反射相关的 API 主要是 java.lang.Class 和 java.lang.reflect 包的内容。

  FieldMethodConstructorSuperclassInterfaceAnnotation

实现的全部接口
所继承的父类
全部的构造器
全部的方法
全部的Field

 

 

二、丰富结构的 Person 类

  在这里提供具有丰富结构的 Person类,然后利用反射机制来获取 Person 类的信息。

  (1)Creature<T>  包含泛型的父类

复制代码
 1 public class Creature<T> implements Serializable {
 2     private char gender;
 3     public double weight;
 4 
 5     private void breath(){
 6         System.out.println("生物呼吸");
 7     }
 8 
 9     public void eat(){
10         System.out.println("生物吃东西");
11     }
12 
13 }
复制代码

 

 

  (2)MyInterface 自定义接口

1 public interface MyInterface {
2     void info();
3 }

 

 

  (3)MyAnnotation 自定义注解

复制代码
1 @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
2 @Retention(RetentionPolicy.RUNTIME)
3 public @interface MyAnnotation {
4     String value() default "hello";
5 
6 }
复制代码

 

 

  (4)Person 类

复制代码
 1 @MyAnnotation(value="hi")
 2 public class Person extends Creature<String> implements Comparable<String>,MyInterface{
 3 
 4     private String name;
 5     int age;
 6     public int id;
 7 
 8     public Person(){}
 9 
10     @MyAnnotation(value="abc")
11     private Person(String name){
12         this.name = name;
13     }
14 
15      Person(String name,int age){
16         this.name = name;
17         this.age = age;
18     }
19     @MyAnnotation
20     private String show(String nation){
21         System.out.println("我的国籍是:" + nation);
22         return nation;
23     }
24 
25     public String display(String interests,int age) throws NullPointerException,ClassCastException{
26         return interests + age;
27     }
28 
29 
30     @Override
31     public void info() {
32         System.out.println("我是一个人");
33     }
34 
35     @Override
36     public int compareTo(String o) {
37         return 0;
38     }
39 
40     private static void showDesc(){
41         System.out.println("我是一个可爱的人");
42     }
43 
44     @Override
45     public String toString() {
46         return "Person{" +
47                 "name='" + name + '\'' +
48                 ", age=" + age +
49                 ", id=" + id +
50                 '}';
51     }
52 }
复制代码

 

 

  (5)

 

三、

 

posted on   格物致知_Tony  阅读(125)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示

目录导航