精华内容
下载资源
问答
  • #1 热门回答(101 赞)首先检索类的字段属性,然后可以检索该值。如果你知道类型,则可以使用其中一个带null的get方法(仅对于静态字段,实际上对于静态字段,将完全忽略传递给get方法的参数)。否则,你可以使用getTy.....

    问题

    说我有一节课:

    public class R {

    public static final int _1st = 0x334455;

    }

    如何通过反射得到字段/属性"_1st"的值?

    #1 热门回答(101 赞)

    首先检索类的字段属性,然后可以检索该值。如果你知道类型,则可以使用其中一个带null的get方法(仅对于静态字段,实际上对于静态字段,将完全忽略传递给get方法的参数)。否则,你可以使用getType并编写适当的开关,如下所示:

    Field f = R.class.getField("_1st");

    Class> t = f.getType();

    if(t == int.class){

    System.out.println(f.getInt(null));

    }else if(t == double.class){

    System.out.println(f.getDouble(null));

    }...

    #2 热门回答(48 赞)

    R.class.getField("_1st").get(null);

    异常处理留给读者练习。

    基本上你通过反射得到的字段就像任何其他字段一样,但是当你调用get方法时,你传递的是null,因为没有实例可以作用。

    这适用于所有静态字段,无论它们是最终的。如果该字段不公开,则需要先调用setAccessible(true),当然SecurityManager必须允许所有这些。

    #3 热门回答(1 赞)

    我遵循相同的路线(查看生成的R类)然后我有这种可怕的感觉它可能是Resources类中的一个函数。我是对的。

    认为它可能会节省一些时间。虽然他们说它在文档中气馁,但这并不太令人惊讶。

    展开全文
  • 然后,程序打印出创建对象的公共变量名称和值,以及未指定参数的公共方法列表 . 程序应该让用户选择一个方法并在创建对象上执行该方法 . 之后,程序应该再次显示公共变量及其值,并允许用户选择方法,等等 ...

    我正在做一个关于Java反思的学校作业 . 详情如下:

    编写一个控制台程序,询问用户类名,加载该类并创建它的实例 . 我们假设该类有一个没有任何参数的构造函数 . 然后,程序打印出创建的对象的公共变量的名称和值,以及未指定参数的公共方法的列表 . 程序应该让用户选择一个方法并在创建的对象上执行该方法 . 之后,程序应该再次显示公共变量及其值,并允许用户选择方法,等等 . 使用以下类来测试您的实现:public class Counter {

    public int c;

    public void increment(){c; }

    public void decrement(){c--; }

    public void reset()

    }

    我遇到的问题与以下句子有关:“未指定参数的公共方法列表” . 有没有办法只列出没有参数的方法?我使用了getMethods,但最终我从带有参数的Object和Class超类中获得了很多方法 .

    例如,我编写的以下代码:

    import java.lang.reflect.*;

    import java.io.*;

    public class Q1 {

    public static void main(String[] args) {

    try {

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    System.out.print("What class would you like to run? ");

    String className = reader.readLine();

    Class c = Class.forName(className);

    Object o = c.newInstance();

    for (Field f : c.getFields())

    System.out.println(f);

    for (Method m : c.getMethods())

    System.out.println(m);

    } catch(IOException e) {

    e.printStackTrace();

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    } catch (InstantiationException e) {

    e.printStackTrace();

    } catch (IllegalAccessException e) {

    e.printStackTrace();

    }

    }

    }

    输出以下内容:

    你想上什么课? Counter public int Counter.c public void Counter.reset()public void Counter.increment()public void Counter.decrement()public final native void java.lang.Object.wait(long)throws java.lang.InterruptedException public final void java.lang.Object.wait()throws java.lang.InterruptedException public final void java.lang.Object.wait(long,int)throws java.lang.InterruptedException public boolean java.lang.Object.equals(java.lang . Object)public java.lang.String java.lang.Object.toString()public native int java.lang.Object.hashCode()public final native java.lang.Class java.lang.Object.getClass()public final native void java.lang.Object.notify()public final native void java.lang.Object.notifyAll()

    有没有办法只获得没有参数的打印?我首先对作业细节的解释是什么?或者,“没有指定参数的公共方法”这个短语可能意味着什么,我完全错误的想法?

    展开全文
  • 首先知道:Class clzz=getClass().getSuperclass();...而Type是JAVA语言中所有类型的公共父接口,Class是其直接实现获取父类泛型类型:Type type=getClass().getGenericSuperclass();ParameterizedType pt =...

    首先知道:

    Class clzz=getClass().getSuperclass();

    Type type=getClass().getGenericSuperclass();

    而Type是JAVA语言中所有类型的公共父接口,Class类是其直接实现类。

    获取父类泛型类型:

    Type type=getClass().getGenericSuperclass();

    ParameterizedType pt = (ParameterizedType) type;//参数化

    Type[] types=pt.getActualTypeArguments();

    Class entityClass=(Class)types[0];

    ......

    以下为 Type直接子接口

    ParameterizedType,GenericArrayType,TypeVariable和WildcardType四种类型的接口

    ParameterizedType: 表示一种参数化的类型,比如Collection

    GenericArrayType: 表示一种元素类型是参数化类型或者类型变量的数组类型

    TypeVariable: 是各种类型变量的公共父接口

    WildcardType: 代表一种通配符类型表达式,比如?, ? extends Number, ? super Integer【wildcard是一个单词:就是“通配符”】

    展开全文
  • 类的初始化:类什么什么情况下会加载到内存中只要类加载到内存中,那么类加载器就会为这个类创建一个class文件对象2. javaBean:数据库中的表和java中的类对应关系javaBean中包含的内容:1> 私有的成员变量2> ...

    反射和BeanUtils类

    1. 类的初始化:类什么什么情况下会加载到内存中

    只要类加载到内存中,那么类加载器就会为这个类创建一个class文件对象

    2. javaBean:数据库中的表和java中的类对应关系

    javaBean中包含的内容:

    1> 私有的成员变量

    2> 公共的get/set方法

    3> 空参数构造方法(默认)

    4> toString方法

    5> 实现序列化接口

    3. 获取Class文件的三种方式:

    1> 使用Object类中的方法

    Class> getClass() 返回此 Object 的运行时类。

    2> 可以使用类的class属性

    任意一种数据类型(基本类型4类8种,引用类型(类,接口,数组))

    java都会为这种数据类型赋予一个class属性

    3> 可以使用Class类的静态方法获取

    static Class> forName(String className) 返回与带有给定字符串名的类或接口相关联的 Class 对象。

    方法的参数:

    String className:全类名(包名+类名)

    4. 使用反射技术获取类中的构造方法,并实例化这个构造方法(创建对象)

    实现步骤:

    1> 获取Person类的class文件对象

    2> 使用class文件对象中的方法getConstructor获取构造方法Constructor

    3> 使用Constructor类中的newInstrance方法实例化Person对象

    使用前提:

    1> 类中必须有空参数构造方法

    2> 空参数构造方法的修饰符不能是private,建议使用public

    构造方法

    public Person()

    public Person(String name, int age, String sex)

    private Person(String name, int age)

    1> Constructor>[] getConstructors() 获取的是所有公共构造方法

    Constructor>[] getDeclaredConstructors() 获取类声明(定义)的所有构造方法

    Constructor getConstructor(Class>... parameterTypes) 获取指定公共构造方法。

    Constructor getDeclaredConstructor(Class>... parameterTypes) 获取指定构造方法。包含私有的

    参数:

    ... 可变参数,可以写,可以不写,可以写多个(0,1,多个)

    Class>... parameterTypes:构造方法参数的Class文件对象

    2> T newInstance(Object... initargs)

    使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。

    参数:

    Object... initargs:调用构造方法,实际传递的参数

    返回值:

    T:返回的是Object对象,这个Object对象就是Person对象(多态)

    3> Method[] getMethods() 获取的类和父类中所有的公共成员方法

    Method[] getDeclaredMethods() 公共、保护、默认(包)访问和私有方法,但不包括继承的方法。

    4> Method getMethod(String name, Class>... parameterTypes) 获取指定公共成员方法。

    Method getDeclaredMethod(String name, Class>... parameterTypes) 获取指定已声明方法。包含私有的

    方法的参数:

    String name:方法的名称

    Class>... parameterTypes:方法参数的class文件对象,String.class,int.class

    5> 使用Method类中的方法invoke执行获取到的方法

    java.lang.reflect.Method

    Object invoke(Object obj, Object... args)

    对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。

    参数:

    Object obj:对象,方法的执行必须有对象支持,要你执行的方法属于哪个对象,就传递哪个对象

    传递Person,可以使用反射快速创建对象方式获取

    Object... args:调用方法传递的实际使用的参数(值)

    返回值:

    Object:如果方法有返回值,则返回对应的值,值由各种数据类型,所以使用Object类型接收

    如果方法的返回值类型是void,没有返回值,则Object的值是null

    6> private void method()

    私有方法不能直接使用,需要取消java的访问权限检查

    java.lang.reflect.Method extends java.lang.reflect.AccessibleObject

    privateMethod.setAccessible(true);//暴力反射

    私有构造方法不能创建对象使用,有权限检查,会抛出IllegalAccessException:非法的权限访问异常

    可以使用Constructor的父类AccessibleObject中方法设置方法的访问权限

    java.lang.reflect.AccessibleObject

    void setAccessible(boolean flag) 将此对象的 accessible 标志设置为指示的布尔值。

    值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。

    值为 false 则指示反射的对象应该实施 Java 语言访问检查。

    暴力反射不推荐,破坏了类的封装性

    * 反射综合案例:

    通过反射技术,获取JavaBean的对象,给JavaBean的成员变量注入(赋)值

    * 实现步骤:

    1> 创建一个properties配置文件存储成员变量的名字和值

    2> 使用Properties集合+IO流,读取配置文件,把健和值保存到Properties集合中

    3> 使用反射技术获取javabean的class文件对象

    4> 使用反射技术快速创建javabean对象

    5> 遍历存储键值对的Properties集合,获取每一对键值

    6> 使用获取到的健,拼接setXXX方法

    7> 使用反射技术根据拼接的setXXX方法,获取方法的Method对象

    8> 使用反射技术调用Method对象中的方法invoke给成员赋值(value)

    5. 使用Apache提供的工具类BeanUtils,给成员变量赋值,获取成员变量的值

    注意:

    BeanUtils可以操作的数据类型有:基本数据类型(4类8种),基本类型的包装类,String类型;以上三种类型的数组形式

    BeanUtils赋值的时候,可以把字符串类型的基本类型的值,转换为基本类型给成员变量赋值 相当于 Integer.parseInt("100");

    综合案例:

    读取XML中的配置文件信息,使用反射技术创建JavaBean对象,使用BeanUtils将XML中的数据保存到JavaBean类的属性中

    实现步骤:

    1> 定义两个javabean类,Person,Student

    2> 定义一个xml文件,存储javabean的全类名和属性名属性值(属性--变量)

    3> 使用dom4j解析xml文档,获取javabean的全类名和属性名属性值

    4> 使用反射技术,通过获取的全类名,创建javabean对象

    5> 使用BeanUtils工具类中的的方法setProperty给成员变赋值

    展开全文
  • 精品学习资料获取通道,参见文末什么是AOPAOP(Aspect-OrientedProgramming,面向方面编程),它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为...
  • 类的初始化:类什么什么情况下会加载到内存中只要类加载到内存中,那么类加载器就会为这个类创建一个class文件对象2. javaBean:数据库中的表和java中的类对应关系javaBean中包含的内容:1> 私有的成员变量2> ...
  • 欢迎关注我头条号:Wooola,专注于Java、Golang、微服务架构,致力于每天分享原创文章...本文将从三个方面讲解:配置中心:全局公共邮件参数配置编写java发邮件公共组件:dcp-comp-mail微服务集成邮件组件,发送邮...
  • 下面代码段向您展示了如何使用JDK Security API生成公共和私有密钥。私钥可用于对文档签名,而公钥可用于验证文档签名有效。java.security软件包中提供了用于生成密钥对API 。这意味着我们必须将此包导入到我们...
  • 应用场景:例如:有这样的需求,前端传来一串json字符串,需要转成实体,如果利用struts可识别的参数格式可直接映射为对应的实体。但是有些格式(如info="user.userId=3289e8&user.userName=%E8%B6%B3%E7%90%83&...
  • 例如,String是Java不可变。我们可以按照以下给定规则创建一个不可变的类。将定为final-应为final,以便不能扩展。将每个字段定为最终值-每个字段应定为最终值,以便初始化后无法对其进行修改。为每个字段...
  • 做法:将类的属性xxx私有化(private),同时提供公共的(public)方法来获取(getXxx)和设置(setXxx)如:private String name; public String getName(){ return name; } public void setName(String na.....
  • JAVA_API1.6文档(中文)

    万次下载 热门讨论 2010-04-12 13:31:34
    javax.imageio.plugins.bmp 包含供内置 BMP 插件使用的公共类的包。 javax.imageio.plugins.jpeg 支持内置 JPEG 插件的类。 javax.imageio.spi 包含用于 reader、writer、transcoder 和流的插件接口以及一个运行时...
  • 在我微博里,我设计了一个公共类,这个类主要是通过参数调用新浪接口获取json数据。然后我们通过json解释出我们需要对象集合。 这个类主要net包里Oauth.java 这个类没什么好讲,主要是json解释。看下一般就...
  • 为写成JavaBean,必须是具体公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 可以通过...
  • Java Bean详解

    万次阅读 多人点赞 2018-11-14 21:46:55
    为写成JavaBean,必须是具体公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 可以通过...
  • javaType

    2020-10-29 14:10:39
    Java 编程语言从Java 5以后就引入Type体系,大大方便了我们代码编写和优化,但是当泛型擦除时,擦除类型变量,并替换为限定类型,此时我们在运行时期便无法获取泛型原本所带泛型。所以java引入了Type这一概念...
  • 项目中公共的方法提取成工具,如果公共方法没有对参数进行校验,在别的地方调用没有按照规传参就会出现异常,这个时候检查起来比较困难要一直追溯到那里产生了错误的参数。 Effective Java第二版第38条建议 对于...
  • 上一篇我们说了Java反射之...为写成JavaBean,必须是具体公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,通过set和get方法获取。一般我们根据这种方法...
  • 有时候通过java反射调用方法 会报 java.lang.NoSuchMethodException ,但是进入里面查看,明明是有这个方法,咋提示没有呢? 这是因为有方法是私有,而代码里面是通过 getMethod 方法获取,就会报这个错误。要...
  • JAVAbean方法

    千次阅读 2018-04-10 22:04:54
    简单笼统说就是一个,一个可复用的类。 javaBean在MVC设计模型中是model,又称模型层,...为写成JavaBean,必须是具体公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将...
  • 为写成JavaBean,必须是具体公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 可以通过...
  • 现有一个需求要求公共类的main方法要根据传入的参数实例化某个具体类,并调用该类的都有的一个方法getJob做某些操作。参数类型参数1 自定义job类型的名称参数2 输出路径参数3,4,5... 输入路径*/enter description ...
  • 为写成JavaBean,必须是具体公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 可以通过...
  • JavaBean是一种JAVA语言写成可重用组件()。必须遵循一定规范:1):必须使用public修饰。2):必须保证有公共无参构造器。即使手动提供参数的构造器,也得提供无参数构造器。3):包含属性操作手段(给...
  • java中bean理解

    2017-11-23 11:25:50
    简单笼统说就是一个,一个可复用的类。 javaBean在MVC设计模型中是model,又称模型层,在...为写成JavaBean,必须是具体公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将
  • 为写成JavaBean,必须是具体公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 可以通过...
  • 为写成JavaBean,必须是具体公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 可以通过...
  • Java之反射

    2020-11-07 16:01:47
    注:Class 类的实例表示正在运行的 Java 应用程序中的类和接口 Class类获取构造器的方法 //获取某一个构造方法所在对象:Constructor //获取指定的公共构造方法 //参数:parameterTypes可变参数 里面相当于数组 //参数...
  • 上一篇我们说了Java反射之数组...为写成JavaBean,必须是具体公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,通过set和get方法获取。 一般我们根据...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 292
精华内容 116
关键字:

java获取公共类的参数

java 订阅