1. 反射调用默认访问权限的内部类

package com.blueStarWei.invoke;

import java.lang.reflect.Method;

import com.blueStarWei.invoke.OuterClass.InnerClass;

class OuterClass {
public void func(){
System.out.println("Outer Class.");
} class InnerClass {
private String mName;
public InnerClass(String mName) {
this.mName = mName;
}
void getName(){
System.out.println("Name is : "+mName);
} }
} public class OuterInnerClass { public static void main(String[] args) {
try {
/*通过反射实例化内部类
* 强大之处在于:当内部类私有化(private class InnerClass)时,也可以调用
* */
Class outerClass = Class.forName("com.blueStarWei.invoke.OuterClass");
Class innerClass = Class.forName("com.blueStarWei.invoke.OuterClass$InnerClass");
Method method = innerClass.getDeclaredMethod("getName");
//TODO study it
//内部类newInstance的第一个参数必须是外部类实例的引用
method.invoke(innerClass.getDeclaredConstructors()[0].newInstance(outerClass.newInstance(),"Wei"));//Name is : Wei /*常规方法实例化内部类
* 当内部类私有化时,无法通过该方式实例化内部类
* */
OuterClass outerClass1 = new OuterClass();
InnerClass innerClass1 = outerClass1.new InnerClass("David");
innerClass1.getName();//Name is : David
} catch (Exception e) {
e.printStackTrace();
}
}
}

2. 反射调用静态内部类

package com.blueStarWei.invoke;

import java.lang.reflect.Method;

class OuterClass {
public void func(){
System.out.println("Outer Class.");
} static class InnerClass {
private String mName;
public InnerClass(String mName) {
this.mName = mName;
}
void getName(){
System.out.println("Name is : "+mName);
}
}
} public class StaticInnerClass { public static void main(String[] args) {
try {
/*通过反射实例化内部类 */
Class outerClass = Class.forName("com.blueStarWei.invoke.OuterClass");
Class innerClass = Class.forName("com.blueStarWei.invoke.OuterClass$InnerClass");
Method method = innerClass.getDeclaredMethod("getName");
//静态内部类没有持有外部类的引用,不需要传递外部类实例对象的引用
method.invoke(innerClass.getDeclaredConstructors()[0].newInstance("Wei"));//Name is : Wei } catch (Exception e) {
e.printStackTrace();
}
}
}

3. 反射调用匿名内部类

package com.blueStarWei.invoke;

class OuterClass {
public Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("This is InnerClass.");
}
};
} public class AnonymousInnerClass {
public static void main(String[] args) {
try {
Class outerClass = Class.forName("com.blueStarWei.invoke.OuterClass");
//将匿名内部类当作外部类的成员变量
Runnable runnable = (Runnable) outerClass.getDeclaredField("runnable").get(outerClass.newInstance());
runnable.run();
} catch (Exception e) {
e.printStackTrace();
}
}
}

   更多内容,请访问:http://www.cnblogs.com/BlueStarWei/

Java反射之调用内部类的更多相关文章

  1. 通过JAVA反射,调用未知类的类方法

    下面是一个比较简单的通过JAVA的反射机制调用已知方法的例子 package com.togeek.mvntest; import java.lang.reflect.InvocationTarget ...

  2. Java 反射 方法调用

    在使用Java 反射时,对方法的调用,可能碰到最多的问题是,方法的变量如何使用.其实,调用方法的变量全部在参数数组里,不管有多少个参数,你都要把它放在参数数组里,如果是单个非数组参数,则可不使用参数数 ...

  3. Java反射机制调用对象的方法 —— 将一个对象的属性值赋值给另一个对象的属性

    模拟一个场景: 众所周知,EasyExcel导出Excel文档是依赖于注解完成的,在实体类需要导出的属性上面加上注解,导出的时候会自动识别该属性. 假如我们现在需要导出用户的信息,又不想污染原本的实体 ...

  4. 利用java反射动态调用方法,生成grid数据

    项目中需要java后台查询并组装前台grid的数据,数据行数不定,数据行定义不定,开始用了最原始的方法,写了几百行,就是前台需要什么字段后台拼接什么字段,java代码冗余量非常大,并且不够灵活,一旦前 ...

  5. Java反射机制调用private类型的构造方法

    单例类: package singleton; public class SingletonTest { // 私有构造方法 private SingletonTest(){ System.out.p ...

  6. Java反射机制调用私有方法

    1.获取目标类: 每个类都有一个class属性,通过实体类的class属性获取: Class clazz = Person.class 通过对象获取.  Person p1 = new Person( ...

  7. Java 反射 调用私有构造方法

    单例类: package singleton; public class SingletonTest { // 私有构造方法 private SingletonTest(){ System.out.p ...

  8. java 通过反射机制调用某个类的方法

    package net.xsoftlab.baike; import java.lang.reflect.Method; public class TestReflect {     public s ...

  9. java反射 cglib asm相关资料

    有篇文章对java反射的调用的效率做了测试,写的比较好.猛击下面地址 http://www.blogjava.net/stone2083/archive/2010/09/15/332065.html ...

随机推荐

  1. Mybatis源码之Statement处理器StatementHandler(一)

    StatementHandler通过类名我们可以了解到它可能是Statement的处理器,它是一个接口,其实现类如下: BaseStatementHandler:一个抽象类,只是实现了一些不涉及具体操 ...

  2. (NO.00003)iOS游戏简单的机器人投射游戏成形记(二十)

    接上一篇文章,我们现在来实现篮框的感应器. 所谓感应器,就是在物体接触到的时候做出反应的节点.我们需要将感应器放在篮框底部,这样子弹接触感应器的时候,我们就知道子弹坠入了篮框,从而得分. 为了放置子弹 ...

  3. ROS(indigo)_turtlebot仿真示例包括stage和gazebo

    ROS(indigo)_turtlebot仿真示例包括stage和gazebo 现上参考网址: turtlebot:http://wiki.ros.org/Robots/TurtleBot stage ...

  4. Touch Handling in Cocos2D 3.x(七)

    在touchMoved方法中寻找触摸在父节点(CCScene)中的位置并且移动CCDragSprite到其父节点的相应位置中去. 在我们在动作中观赏拖放机制之前,我们需要使用这个新实现的类.打开Mai ...

  5. 【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410

    作者 : 万境绝尘 转载请著名出处 终于拿到板子了, 嵌入式开发正式开启. 板子型号 : 三星 S3C6410 基于ARM11, 指令集基于arm6指令集; 为毛不是 Cortext A9的板子; 烧 ...

  6. HashMap与HashTable面试宝典

    u012233832的专栏 初生牛犊 目录视图 摘要视图 订阅 写博客,送money.送书.送C币啦   7-8月博乐推荐文章    砸BUG 得大奖 100%中奖率   微信开发学习路线高级篇上线  ...

  7. Mahout kmeans聚类

    Mahout  K-means聚类 一.Kmeans 聚类原理 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚 ...

  8. Oracle Inventory Management Application Program Interface ( APIs)

    In this Document   Goal   Solution   References APPLIES TO: Oracle Inventory Management - Version 12 ...

  9. Cocos2d中update与fixedUpdate的区别(五)

    在真实情况中update:和fixedUpdate方法如何去调用? 由上所述,所以update方法在每帧被调用1次,从而给你一个机会去更新你的游戏对象的状态在其绘制之前.而fixedUpdate:方法 ...

  10. ViewPager切换动画PageTransformer的使用

    Android从3.0开始添加了属性动画后,诸多难以实现的动画都可以轻松解决了,v4包下的ViewPager控件当然也不例外,相对于非常平庸的默认切换动画,Google官方给我们展示了两个动画例子:D ...