`
kalogen
  • 浏览: 863494 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

android 反射机制中 getMethod()和getDeclaredField()区别

 
阅读更多

今天在程序中用到java反射机制时,遇到的问题记录一下:我当时遇到的问题是,我用反射getMethod()调用类方法时,发生NoSuchMethodException异常,后来上网发现getMethod()调用公共方法,不能反射调用私有方法,后来找到getDeclaredField()能够访问本类中定义的所有方法。后来用这个方法解决了我遇到的问题。我查了java api文档,其中详细说明如下:

Method getDeclaredMethod(String name, Class… parameterTypes)d
          返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
 Method[] getDeclaredMethods()
          返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
Method getMethod(String name, Class… parameterTypes)
          返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
 Method[] getMethods()
          返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。
getDeclaredField(String name)
          返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
 Field[] getDeclaredFields()
          返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。

 

分享到:
评论

相关推荐

    java反射机制,调用私有方法

    Method,invoke,getMethod等反射私有方法和私有属性

    xml与反射.txt

    1 简述反射机制 反射是一种间接操作目标对象的机制,在程序程序运行时获取或者设置对象自身的信息。 只要给定类的名字,就可以通过反 射获取类的所有信息,接着便能调用它的任何一个方法和属性。 反射的步骤有哪些?...

    01:详解C#中的反射.pdf

    反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。有了反射,即可对每一个类型了如指掌。另外我还可以直接创建对象,即使这个...

    Java 反射(Reflection) 经典实用例子

    Java提供了一套机制来动态执行方法和构造方法,以及数组操作等,这套机制就叫——反射。反射机制是如今很多流行框架的实现基础,其中包括Spring、Hibernate等。原理性的问题不是本文的重点,接下来让我们在实例中...

    day021-反射和注解笔记和代码.rar

    Class 类的实例表示正在运行的 Java 应用程序中的类和接口; 枚举是一种类,注解(指的是注解Annotation)是一种接口; 每个数组都是 Class字节码类中的一个具体 对象 基本的 Java 类型(boolean、byte、...

    Android 一键加速(内存清理、缓存清理) 源码

    Method method = Class.forName("android.app.ActivityManager").getMethod("forceStopPackage",String.class); method.invoke(mActivityManager, pkgList[j]); // packageName是需要强制停止的应用...

    如何清空缓存

    均用到反射这方面的知识,没办法,Android系统API把这些方法隐藏了。反射就不说了,不懂得可以自己百度,谷歌!  一种带root权限的: Class c1 = Class.forName("android.content.pm.IPackageDataObserver"); ...

    c# 反射实例

    //c# 反射实例 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace ConsoleApplication1 { class Program { static void Main( string...

    Java反射封装库joor.zip

    jOOR 在java原生的反射基础上进行了简单的封装,使得反射使用方便不少! 举个简单的列子,供大家参考。 java 原生反射写法: try { Method m1 = department.getClass().getMethod("getEmployees"); Employee ...

    Java反射方法调用

    调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用数组参数的方法 调用私有方法

    Android很全常用工具类源码

    Android系统下载管理DownloadManager增强方法,可用于包括获取下载相关信息,如: getStatusById(long) 得到下载状态 getDownloadBytes(long) 得到下载进度信息 getBytesAndStatus(long) 得到下载进度信息和状态 ...

    Android渠道打包工具packer-ng-plugin.zip

    }读取APK文件,由于这个库 packer-helper 需要同时给Gradle插件和Android项目使用,所以不能添加Android相关的依赖,但是又需要读取自身APK文件的路径,使用反射实现:// for android code private static ...

    android 二维码开发,Camera竖屏问题

    android:screenOrientation="portrait" 2、在DecodeHandler.java文件中,找到decode(byte[],int,int)方法,在buildLuminanceSource调用前,加上如下: byte[] rotatedData = newbyte[data.length]; for(inty = 0; y...

    thinkPHP基于反射实现钩子的方法分析

    PHP系统自带的 ReflectionClass、ReflectionMethod 类,可以反射用户自定义类的中属性,方法的权限和参数等信息,通过这些信息可以准确的控制方法的执行。 ReflectionClass: 主要用的方法: hasMethod(string) 是否...

    https网络请求,包含get和post形式

    封装好的,https网络请求,信任所有证书模式。包含get请求模式以及post请求模式。GetMethod和PostMehtod两个类。

    关于操作反射的部分代码

    //显示某对象的某方法和某属性 show(a,"show"); } //对未知类型的对象操作 public static void show(Object obj,String method_name)throws Exception{ Class c=obj.getClass(); Field field=c.getField...

    PHP类的反射用法实例

    本文实例讲述了PHP类的反射用法。分享给大家供大家参考。具体实现方法如下: 该例实现对于每个频道获取相应的类来执行相应的操作。... $recd = $class->getmethod(‘exeRecd’);  // 生成类的实例   $

    Java中的反射(二)

    反射必会方法 继上篇,总结整理: Method成员方法涉及到的方法 Field成员变量涉及到的方法 给予暴力反射私有化内容的权限操作 1.Method成员方法涉及到的方法 通过Class对象来获取Method对象,需要考虑的内容有: ...

    ReflectionUtil:反射工具包

    反射工具包,利用反射的API直接生成Java字节码,提高执行效率。 ###普通方法调用 所有的命令最终生成到Invoker对象的invoke方法中 public Object invoke(Object[] args); 具体使用如下: InvokerBuilder builder=...

    KillRunApkApplication.rar

    列出当前系统中运行的运行app,并可以选择杀死,释放资源,优化内存,基于android studio开发代码。6.0以上版本请把am.killBackgroundProcesses(packageName);代码替换为 : ActivityManager mActivityManager = ...

Global site tag (gtag.js) - Google Analytics