package com.test5;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

/**

* Java泛型和反射机制(泛型的好处 代码安全简单,自动装箱拆箱,提高代码的重用率)

*/

public class test5 {

public static void main(String[] args) {

Employer employer = new Employer(1000, "张三", 25);

Ref ref1 = new Ref(employer);

System.out.println("---------------------打印类信息-----------------------");

ref1.printClassMethodMessage();

System.out.println("---------------------打印类成员变量信息-----------------------");

ref1.printFieldMessage();

/* 打印显示

---------------------打印类信息-----------------------

类的名称是:com.test5.Employer

java.lang.String toString()

java.lang.String getName()

void setName(java.lang.String,)

int getEid()

int getAge()

void setAge(int,)

void setEid(int,)

void wait(long,)

void wait(long,long,int,)

void wait()

boolean equals(java.lang.Object,)

int hashCode()

java.lang.Class getClass()

void notify()

void notifyAll()

---------------------打印类成员变量信息-----------------------

int eid

java.lang.String name

int age

*/

}

}

/**

* 泛型类

* @param

*/

class Ref {

private T o;

//构造函数

public Ref(T o) {

this.o = o;

}

/**

* 打印类的信息,包括类的成员函数,成员变量

*/

public void printClassMethodMessage() {

//要获取类的信息,首先要获取类的类类型

Class c = o.getClass();//传递的是哪个子类的对象,c 就是子类的类类型

//获取类的名称

System.out.println("类的名称是:" + c.getName());

/**

* Method类,方法对象

* 一个成员方法就是一个Method对象

* getMethods()方法获取的是所有的public的函数,包括父类继承而来的

* getDeclaredMethods()方法获取的是所有该类自己声明的方法,不问访问权限

*/

Method[] methods = c.getMethods();//c.getDeclaredMethods()

for (int i = 0; i < methods.length; i++) {

//得到方法的返回值类型的类类型

Class returnType = methods[i].getReturnType();

System.out.print(returnType.getName() + " ");

//打印方法名字

System.out.print(methods[i].getName() + "(");

Class>[] parameterTypes = methods[i].getParameterTypes();

String para = "";

for (Class class1 : parameterTypes) {

para += class1.getName() + ",";

System.out.print(para);

}

System.out.println(")");

}

}

/**

* 获取成员变量的信息

*/

public void printFieldMessage() {

Class c = o.getClass();

/**

* 成员变量也是对象

* java.lang.reflect.Field

* getFields()方法获取的是所有的public 的成员变量的信息

* getDeclaredFields 获取的是该类自己声明的成员变量的信息

*/

// Field[] fs = c.getFields();

Field[] fs = c.getDeclaredFields();

for (Field field : fs) {

//得到成员变量的类型的类类型

Class fieldType = field.getType();

String typeName = fieldType.getName();

//得到成员变量的名称

String fieldName = field.getName();

System.out.println(typeName + " " + fieldName);

}

}

}

class Employer {

public Employer(int eid, String name, int age) {

this.eid = eid;

this.name = name;

this.age = age;

}

private int eid;

private String name;

private int age;

public int getEid() {

return eid;

}

public void setEid(int eid) {

this.eid = eid;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return "Employer{" +

"eid=" + eid +

", name='" + name + '\'' +

", age=" + age +

'}';

}

}

java 反射与泛型_Java基础系列 - 泛型和反射机制相关推荐

  1. pgsql中float4导致java程序精度丢失_Java基础系列02

    注释 Java中支持三种注释:1.单行注释以//开始换行结束.2.多行注释以/*开始,以*/结束.3.说明注释以/**开始,以*/结束. 关键字 关键字:是指在程序中,Java已经定义好的单词,具有特 ...

  2. C#基础系列2:反射以及Attri…

    原文地址:C#基础系列2:反射以及Attribute在ORM中的应用[转] 作者:YouthWithYouth 反射以及Attribute在ORM中的应用 一. 反射 什么是反射? 简单点吧,反射就是 ...

  3. java泛型常用特点_Java基础系列(3)Java泛型知多少?

    不积跬步,无以至千里:不积小流,无以成江海 什么是泛型?为什么要使用泛型? 泛型,即"参数化类型".一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参.那么参数化类 ...

  4. java中什么泛型_java中的泛型(一)

    在java中我们定义接口其实定义的是这个类的功能,在很多时候我们并不关心这个类的类型而是这个类的能力.泛型的出现让我们的代码和代码所能操作的类型不在绑定在一起,不仅可以复用代码降低耦合还可以提高代码的 ...

  5. java 5 多线程_Java基础系列五、多线程

    1.什么是进程?什么是线程? 进程概念:在计算机中运行的软件,是操作系统中最基础的组成部分 .进程是容器,里面装的都是线程. 线程概念:就是运行在进程中的一段代码,是进程中最小组织单元. 注意: 1. ...

  6. java代码讲解_Java基础系列-代码块详解

    注:本文出自博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 前言 Java基础系列,尽量采用通俗易懂.循序渐进的方式,让大家真正理解Java基础知识! 代码块 ...

  7. .net java 泛型_Java高级特性泛型看这一篇就够了

    作者:qwer1030274531 出自:ITPUB博客 1.为什么我们需要泛型? 通过两段代码就可以知道为什么需要泛型 /*** * 没有泛型的时候实现加法 */public class NonGe ...

  8. java基本数据类型泛型_Java中的泛型

    泛型规范在JDK1.5版本中被添加,使用泛型机制编写的代码比起随意使用Object变量然后再进行强制类型转换的代码具有更高的安全性和可读性,同时也更为简洁.泛型对于集合类尤其有用,例如 ArrayLi ...

  9. java注解和反射原理_Java中的注解和反射

    最近又回顾了一下 Java 中的注解和反射知识点,注解在日常开发中使用很多,但是反射比较少.值得注意的是 Java 的各种框架底层源码中大量使用了注解和反射,阅读源码,这些是基本功,面试中这部分内容也 ...

最新文章

  1. 职业生涯又一个转折点
  2. CTF——MISC——zip伪加密总结
  3. Nginx +Tomcat 实现动静态分离(转)
  4. java获取mysql数据定时执行_mysql 事件处理(定时触发某个任务或存储过程等)
  5. cocos2d-x for wp8 设置横竖屏
  6. 宝塔Linux 8888 进不去
  7. python小白逆袭大佬_Python小白逆袭大神心得
  8. oracle删临时表,ORACLE中创建和删除临时表
  9. MongoTemplate实现mongodb聚合管道查询
  10. 最新CTR预测服务的GPU优化实践
  11. 嵌入式QTlinux 工程编译
  12. 关于ftp操作中被动模式(Passive Mode)是什么意思?
  13. pwm频率输出不对解决思路
  14. 硬盘突然变raw格式_硬盘突然变为RAW格式解决办法
  15. 简单的python画图小实例
  16. Linux常用命令-1
  17. Android-混淆学习
  18. 木马核心技术剖析读书笔记之木马技术的发展趋势
  19. 多网络情况下,Kafka客户端如何选择合适的网络发起请求
  20. CRect::IntersectRect的功能

热门文章

  1. 还是动态生成一个控件
  2. Array.prototype.slice.call(arguments)
  3. Conda 安装本地包
  4. Linux命令行参数前加--,-和不加杠
  5. SlickOne 敏捷开发框架介绍(二) -- 多用户/多租户/SAAS软件基础框架实现
  6. Ubuntu apt-get 更新/查看软件
  7. 夺命雷公狗---微信开发39----微信语言识别接口1
  8. BookSmart Self Publishing
  9. 系统带你学习 WebAPIs 第三讲
  10. spring-beans模块分析