Java泛型和反射总结
A a = (A)Class.forName(“pacage.A”).newInstance();
这和你 A a = new A(); 是一样的效果。
String className = “Example”;
class c = Class.forName(className);
1、如果你知道一个实例,那么你可以通过实例的“getClass()”方法获得该对象的类型类;/
2、如果你知道一个类型,那么你可以使用“.class”的方法获得该类型的类型类。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//通过泛型新建对象。Class.forName()和A.class.h// Class<Son> a = Son.class;try{ Class a = Class.forName("com.hao.class14.Son");}catch(Exception e){} System.out.println("do="+a.getName()); //创建新的对象。 Son b= (Son) a.newInstance();需要默认的构造方法,即先调用无参构造方法Father b= a.newInstance(); if(b instanceof Son){//向下转型 Son son = (Son)b; } b.do1(); //创建父类对象 Class<? super Son> c2 = a.getSuperclass();//优于普通的Class ((Father)c2.newInstance()).do1(); //class文件反射查询类的参数。 Method[] ee = a.getDeclaredMethods(); |
出现的时期不同:
Class.forName()在运行时(类地址为字符串)加载(先找到class中的类):加载类,初始化静态方法。
使用Class类的中静态forName()方法获得与字符串对应的Class对象
运行期加载需要加上try。。。catch语句。
类字面常量Class.class和getClass()是在编译时加载类.不初始化,调用静态或非静态域时初始化。
1、.class用于类名,getClass()是一个final native的方法,因此用于类实例
2、.class在编译期间就确定了一个类的java.lang.Class对象;
3、.getClass()方法在运行期间确定一个类实例的java.lang.Class对象
调用Object类的getClass()方法来得到Class对象
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//class文件反射查询类的方法,使用invoke调用。 Method[] ee = a.getDeclaredMethods();//该方法是获取本类中的所有方法,包括私有的(private、protected、默认以及public)的方法 Method[] ee1 = a.getMethods();//该方法是获取本类以及父类或者父接口中所有的公共方法(public修饰符修饰的) String [] names ={"tom","tim","allen","alice"}; try { Method m3 = ee[3]; m3.invoke(a.newInstance(),null); Method m1 = a.getMethod("do5",String.class); for(String name:names) m1.invoke(a.newInstance(),name); } catch (Exception e) { e.printStackTrace(); } Method echoMethod = classType.getMethod("echo", new Class[] { String.class }); result = echoMethod.invoke(invokertester, new Object[] { "hello" }); System.out.println(result); |
泛型机制:
这种是jdk1.5引入的泛型机制,没有T这种类型,T是根据你输入的来动态匹配。加入你集合放入的String类型,那么你就可以使用List<String>,然后代码中所有出现T的地方都用String代替就可以了 ,放入的是Object类型,那么你就用List<Object>,
静态资源不认识泛型。
泛型三种:
[1]ArrayList<T> al=new ArrayList<T>();指定集合元素只能是T类型
[2]ArrayList<?> al=new ArrayList<?>();集合元素可以是任意类型,这种没有意义,一般是方法中,只是为了说明用法
[3]ArrayList<? extends E> al=new ArrayList<? extends E>();
泛型的限定:
? extends E:接收E类型或者E的子类型。
?super E:接收E类型或者E的父类型。
Java泛型和反射总结的更多相关文章
- 应用Java泛型和反射导出CSV文件
项目中有需求要把数据导出为CSV文件,因为不同的类有不同的属性,为了代码简单,应用Java的泛型和反射,写了一个函数,完成导出功能. public <T> void saveFile(Li ...
- Java泛型和反射
1. 字节码对象的三种获取方式 以String为例 Class<? extends String> strCls = "".getClass(); Class<S ...
- Java泛型反射机制(二)
/** * @author Administrator * 好处:泛型:1安全 2减少代码重用率 */ package com.test; import java.lang.reflect.Metho ...
- Java基础系列 - 泛型和反射机制
package com.test5; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * Java泛型和反射机 ...
- java 泛型基础问题汇总
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...
- 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)
建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...
- java的泛型与反射机制
什么是泛型? 泛型,即“参数化类型”.顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参) ...
- Java高质量代码之 — 泛型与反射
在Java5后推出了泛型,使我们在编译期间操作集合或类时更加的安全,更方便代码的阅读,而让身为编译性语言的Java提供动态性的反射技术,更是在框架开发中大行其道,从而让Java活起来,下面看一下在使用 ...
- JAVA的泛型与反射的联合应用
通过泛型与反射的结合,可以编写框架来使开发更容易,这里演示的是BaseDao部分的简单使用. BaseDao部分代码: public abstract class BaseDao<T>{ ...
随机推荐
- Debian9初始配置
1 进入root用户 su root 2 修改镜像源:编辑/etc/apt/sources.list文件 nano /etc/apt/sources.list 修改内容如下: deb http://m ...
- AIO
IBM® 市场 (英文) 提交 我的 IBM 站点导航 学习 开发 社区 学习 Java technology 内容 概览 简单介绍 Asynchronous I/O 开始简单的异步 I/ ...
- ROS下使用ASUS Xtion Pro Live
一.ROS官网hydro版本OpenNI安装 3. Installation 3.1 Ubuntu installation To install only openni_camera: sudo a ...
- Codeforces 451 E Devu and Flowers
Discription Devu wants to decorate his garden with flowers. He has purchased n boxes, where the i-th ...
- 使用SmartQQ实现的智能回复(Web QQ协议)
采用SmartQQ SDK进行开发,官网:https://github.com/ScienJus/smartqq 此项目只是集成使用的方法,在com.jsoft.robot.SmartQQUse.Re ...
- C#使用PrintDocument打印 多页 打印预览
PrintDocument实例所有的订阅事件如下: 创建一个PrintDocument的实例.如下: System.Drawing.Printing.PrintDocument docToPrint ...
- IOS开发 二维码功能的实现
原帖地址:http://yul100887.blog.163.com/blog/static/20033613520121020611299/ 如今二维码随处可见,无论是实物商品还是各种礼券都少不了二 ...
- 单词number 和 numeral 的区别
原文: http://blog.sina.com.cn/s/blog_72cd06360100vn7t.html be of 的用法,相当于表征特征或属性的形容词. 简单地说,“of + 名词”等于“ ...
- CSS样式布局入门介绍,非常详尽
转载自:http://wenboxz.com/archives/try-css-layout.html/
- HDU 2317 Nasty Hacks
Nasty Hacks Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...