精华内容
下载资源
问答
  • 我有一个保存/加载框架,该框架应该保存任意对象图....作为一个简单的例子,我介绍这个:public class Foo implements Savable {private class Bar implements Savable {public void saveState(S...

    我有一个保存/加载框架,该框架应该保存任意对象图.这包括非静态嵌套类的实例.

    嵌套类require为其创建它们的父类的实例所拥有,并且嵌套类使用合成字段知道它属于哪个实例.

    作为一个简单的例子,我介绍这个类:

    public class Foo implements Savable {

    private class Bar implements Savable {

    public void saveState(Saver saver) {

    saver.putInt(3);

    }

    }

    private Bar myBar = new Bar();

    public void saveState(Saver saver) {

    saver.putSavable(myBar);

    }

    }

    在“标准”编译器上,以下代码可以很好地接收一个对象(myBar),找到其父对象(Foo的特定实例)并保留其对子对象的引用:

    if (objectClass.isMemberClass()) {

    //We are a member class, which means we are a non-static inner class, and therefore must save our parent.

    Field[] fields = objectClass.getDeclaredFields();

    //We loop through each of our fields to find the synthetic field created by the compiler that points to our parent.

    for (Field f : fields) {

    String name = f.getName();

    //The synthetic field pointing to the parent is named something like "this$0". At least, with the "standard" compiler it is.

    if (name.startsWith("this$")) {

    f.setAccessible(true);

    Savable parent = (Savable)f.get(objectClass);

    saver.putSavable("_parent", parent);

    break;

    }

    }

    if (!saver.containsKey("_parent")) {

    throw new RuntimeException("Could not find the owner of inner class: " + objectClass);

    }

    }

    因此,就像我说的那样,这在“标准”编译器上可以正常工作.然后在加载时,会发生类似的事情,除了我寻找一个构造函数,该构造函数接受父类的实例并实例化它,并传入父类.

    但!

    它不适用于Android VM.没有合成字段,并且构造函数都看起来很正常,就像它们没有采用父实例一样.

    我在这里吗?该虚拟机显然不喜欢我的方法.在不要求内部类知道它们需要保存对其父类实例的引用的情况下,我在这里可以做些什么吗?

    展开全文
  • 使用反射实例化内部方式 @SuppressWarnings("unchecked") private static Object getInstance(Class<?> clz) { Object obj = null; if (clz.isMemberClass()) { Class<?&...

    使用反射实例化内部类方式

    	@SuppressWarnings("unchecked")
    	private static Object getInstance(Class<?> clz) {
    		Object obj = null;
    		if (clz.isMemberClass()) {
    			Class<?> declaredClass = clz.getDeclaringClass();
    			try {
    				Constructor<Object> dc = (Constructor<Object>) clz.getDeclaredConstructor(declaredClass);
    				dc.setAccessible(true);
    				obj = dc.newInstance(declaredClass.newInstance());
    			} catch (InstantiationException e) {
    				e.printStackTrace();
    			} catch (IllegalAccessException e) {
    				e.printStackTrace();
    			} catch (IllegalArgumentException e) {
    				e.printStackTrace();
    			} catch (InvocationTargetException e) {
    				e.printStackTrace();
    			} catch (NoSuchMethodException e) {
    				e.printStackTrace();
    			} catch (SecurityException e) {
    				e.printStackTrace();
    			}
    		} else {
    			try {
    				obj = clz.newInstance();
    			} catch (InstantiationException e) {
    				e.printStackTrace();
    			} catch (IllegalAccessException e) {
    				e.printStackTrace();
    			}
    		}
    		return obj;
    	}
    
    展开全文
  • Java反射机制demo(二)—通过Class实例化任意的对象上一章节中,实例化了Class对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他的对象的实例。任意一个,UserInfo,package ...

    Java反射机制demo(二)—通过Class实例化任意类的对象

    上一章节中,实例化了Class类对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他类的对象的实例。

    任意一个类,UserInfo,

    package com.aaron.reflect;

    public class UserInfo{

    private int userId;

    private String name;

    private int age;

    public int getUserId() {

    return userId;

    }

    public void setUserId(int userId) {

    this.userId = userId;

    }

    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 "UserInfo [userId=" + userId + ", name=" + name + ", age=" + age + "]";

    }

    }

    使用newInstance方法,通过调用默认的无参构造来实例化一个UserInfo的对象

    package com.aaron.reflect;

    public class Demo1 {

    public static void main(String[] args) {

    Class> c = UserInfo.class;//获得Class类实例

    UserInfo userInfo = null;

    try {

    userInfo = (UserInfo) c.newInstance();//通过Class类的实例获得UserInfo的实例

    } catch (InstantiationException e) {

    e.printStackTrace();

    } catch (IllegalAccessException e) {

    e.printStackTrace();

    }

    userInfo.setUserId(1);

    userInfo.setName("Squee,Spleen and Goblin");

    userInfo.setAge(10);

    System.out.println(userInfo);

    }

    }

    如果了解Java虚拟机,应该知道,一个对象在new之前,堆里是不会分配内存的。因此这个UserInfo的实例是通过Class的实例得到的。

    运行结果:

    UserInfo [userId=1, name=Squee,Spleen and Goblin, age=10]

    注意事项:

    newInstance()调用的是无参的空构造,如果只有参数的构造函数:如下:

    private int userId;

    private String name;

    private int age;

    public UserInfo(int userId, String name, int age) {

    super();

    this.userId = userId;

    this.name = name;

    this.age = age;

    }

    运行Demo,抛出异常:

    java.lang.InstantiationException: com.aaron.reflect.UserInfo

    at java.lang.Class.newInstance(Class.java:359)

    at com.aaron.reflect.Demo1.main(Demo1.java:9)

    Exception in thread "main" java.lang.NullPointerException

    at com.aaron.reflect.Demo1.main(Demo1.java:16

    此时,要定义一个空的构造函数(显式地声明一个空的构造函数)。

    所以,显式声明空的构造函数有时候也是一种很好的习惯。当你要使用反射时,一定不要忘记空的构造。

    Java反射机制demo(一)—实例化Class对象,并获得其他类包名和类型

    Java反射机制demo(一)——实例化Class对象,通过对象获得包名和类型 使用Java中的 本地类作为实验对象,避免自定义的类带来的一些不便. public static void main(S ...

    Java反射机制demo(四)—获取一个类的父类和实现的接口

    Java反射机制demo(四)—获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的getSuperClass()方法能够得到一个类的父类 如果此 Class 表示 ...

    Java反射机制demo(七)—反射机制与工厂模式

    Java反射机制demo(七)—反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...

    Java反射机制demo(六)—获得并操作一个类的属性

    Java反射机制demo(六)—获得并操作一个类的属性 获得并操作一个类的属性?! 不可思议啊,一个类的属性一般都是私有成员变量啊,private修饰符啊! 但是毫无疑问,这些东西在Java的反射机制 ...

    Java反射机制demo(五)—获得并调用一个类中的方法

    Java反射机制demo(五)—获得并调用一个类中的方法 这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和 ...

    Java反射机制demo(三)—获取类中的构造函数

    Java反射机制demo(三)—获取类中的构造函数 1,获取类中所有的构造函数 如下面的代码中所示,这个类中显式的构造函数有五个. 空构造: public UserInfo() 带参构造有四个: pu ...

    Java 反射理解(二)-- 动态加载类

    Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编 ...

    菜鸟学Java(十五)——Java反射机制(二)

    上一篇博文里面,向大家介绍了什么是Java的反射机制,以及Java的反射机制有什么用.上一篇比较偏重理论,理论的东西给人讲出来总感觉虚无缥缈, ...

    Java反射机制(二):通过反射取得类的结构

    在反射运用过程中,如果你想得到一个类的完整结构,那么就要使用到java.lang.reflect包中的几个类: · Constructor  表示类中的构造方法 · Field  表示类中的属性 · ...

    随机推荐

    深入理解脚本化CSS系列第二篇——查询计算样式

    × 目录 [1]getComputedStyle [2]注意事项 [3]currentStyle[4]IE 前面的话 元素的渲染结果是多个CSS样式博弈后的最终结果,这也是CSS中的C(cascade ...

    ue4 c&plus;&plus; 接口

    使用UE4接口比起普通的高级语言,要多做很多工作,是因为要兼容蓝图的使用,有一些小坑需要注意,开始吧. 1.新建接口类 打开UE4编辑器,与往常一样,新建C++类,然后选择Object继承,然后取名字 ...

    Codevs 1010 过河卒

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同 ...

    div均匀分布代码实例

    多个div在同一行以相同间隔分布: 这样的布局效果使用非常的频繁,也就是让多个div在一行分布,并且div于div之间的间隙是一样的,多用在对于产品的展示之用,下面就介绍一下如何实现此中布局,代码实例 ...

    HW3&period;6

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

    windows 下mysql的安装于使用(启动、关闭)

    1.下载Windows (x86, 64-bit), ZIP Archive解压: 2.双击在bin目录里的mysqld.exe dos窗体一闪就没了,这时netstat -an发现port3306已 ...

    chapter9&lowbar;3 协同程序实现迭代器

    将循环迭代器视为"生产者-消费者"模式的一种特例:迭代器产生的数据供循环体消费. 因此,用协同程序写迭代器就理所当然了.因为协同程序可以一改传统调用者与被调用者之间的关系. 有了这 ...

    SQL Server分组查询某最大值的整条数据(包含linq写法)

    想实现如下效果,就是分组后时间最大的那一条数据: 1.SQL SELECT * FROM ( SELECT * , ROW_NUMBER() OVER ( PARTITION BY RIP_GUID ...

    java垃圾回收总结&lpar;2&rpar;

    java垃圾回收总结(2)   上一篇文章 介绍了jvm虚拟机运行时内存结构以及如何标识需要回收的对象,这一节主要讲解垃圾回收的基本算法. 基本上 jvm内存回收有三种 基本算法 标记-清除 标记清除 ...

    Linux 使用硬盘

    一.硬盘分区规划: swap(交换,掉期交易,互换)分区:虚拟内存使用,不能保存用户信息. boot(引导)分区:保存启动系统得相关文件. root(根)分区:放置系统文件得根,所有文件都保存在该分区 ...

    展开全文
  • 小编典典使用反射时,您会发现该内部的构造函数将外部实例作为附加参数(总是第一个)。例:import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;public class ...

    小编典典

    使用反射时,您会发现该内部类的构造函数将外部类的实例作为附加参数(总是第一个)。

    例:

    import java.lang.reflect.Constructor;

    import java.lang.reflect.InvocationTargetException;

    public class OuterClass {

    private class InnerClass {

    }

    public OuterClass() {

    super();

    }

    public static void main(String[] args) {

    // instantiate outer class

    OuterClass outer = new OuterClass();

    // List all available constructors.

    // We must use the method getDeclaredConstructors() instead

    // of getConstructors() to get also private constructors.

    for (Constructor> ctor : OuterClass.InnerClass.class

    .getDeclaredConstructors()) {

    System.out.println(ctor);

    }

    try {

    // Try to get the constructor with the expected signature.

    Constructor ctor = OuterClass.InnerClass.class

    .getDeclaredConstructor(OuterClass.class);

    // This forces the security manager to allow a call

    ctor.setAccessible(true);

    // the call

    try {

    OuterClass.InnerClass inner = ctor.newInstance(outer);

    System.out.println(inner);

    } catch (InstantiationException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (IllegalAccessException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (IllegalArgumentException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (InvocationTargetException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    } catch (NoSuchMethodException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (SecurityException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    2020-09-11

    展开全文
  • 使用反射时,您会发现该内部的构造函数将外部实例作为附加参数(始终为第一个参数)。有关相关信息,请参阅这些问题:例:import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTarget...
  • Class#newInstance方法已经被弃用了,从注释中可以看到推荐使用Constructor#newInstance方法生成实例,即直接通过构造方法生成实例: // getConstructor 方法有可变长参数列表,入参是构造方法的入参类型,这里使用...
  • 所以保证了枚举不会被反射实例化 另外,序列化一个枚举的对象,获取的时候调用的是继承的Enum的valueOf 方法T result = enumType.enumConstantDirectory().get(name);根据name去找存入的对象,所以不会生成多个...
  • 获得实例 我们以汽车类型为例: public class Car { private String name = "111"; public double salary = 12.0; public String getName() { return name; } private void setName...
  • 1.先写一个JavaBean:package com.buaa.reflectTest;public class User {private int id;private int age;private String uname;public int getId() {return id;}public void setId(int id) {this.id = id;}public...
  • 我在顶级模块中有以下代码行:String username = "testuser987-abc-zyx@gmail....在我的“用户”实用程序中,我有以下内容:private class UserBuilder ext...
  • 我们知道,Java应用程序不能访问持久化类private方法,但Hibernate没有这个限制,它能够访问各种级别的方法,如private, default, protected, public. Hibernate是如何实现该功能的呢?答案是利用JAVA的反射机制,如下:...
  • import java.lang.reflect.*;... private int value; private String str; public animal(int val, String s ){ value = val; str = s; System.out.println("constructor ok..."+value+"
  • 1.一个car package java_foundation.test_reflect; public class Car { private String brand; private String color; private int maxSpeed; /** * 创建一个新的实例Car. * */ public Car() { }  /*...
  • 利用反射实例化构造方法、访问中的字段和方法实例化public权限无参构造实例化private权限无参构造实例化public权限有参构造实例化private权限有参构造BindingFlags通过反射访问中的字段通过反射访问中的方法...
  • Java反射机制demo(二)—通过Class实例化任意的对象上一章节中,实例化了Class对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他的对象的实例。任意一个,UserInfo,1 packagecom.aaron....
  • 1.用来被实例化类   package day13; public class Person { private String name; private int age; public void sayHello() { System.out.println("hello!"); } public void sayName() { ...
  • 1.先写一个JavaBean: package com.buaa.reflectTest; public class User { private int id; private int age; private String uname; public int getId() { return id; } public void setId(int id) { this.id...
  • 级联对象实例化 上一节设置多种数据类型 如果现在给定的对象之中存在有其他的引用的级联关系的情况下,称为多级设置。 例如一个雇员属于一个部门,一个部门属于一个公司,所以这个时候对于简单Java的基本关系...
  • 有一个程序集A.DLL,通过Reflector工具查看有一个私有, private class B{ } 不知道到能否反射实例化该私有B?
  • Java反射机制demo(二)—通过Class实例化任意的对象 上一章节中,实例化了Class对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他的对象的实例。 任意一个,UserInfo, 1 package ...
  • Java反射详解-实例化Class对象

    千次阅读 2012-07-25 11:36:57
    直接上代码 package com.riadu.test; /** * 手机模型 * @author www.riadu.com * @date 2012-07-25 ... private String size; //型号 private String factory; //厂商 public Mobi
  • 上一篇文章初步认识了Java反射机制的基本概念,本文将进一步探究 Java 反射机制的作用...直接上代码,一个普通的,然后待会使用反射机制实例化对象,获取普通常量,普通方法,构造方法,静态方法,静态常量 p...
  • /** * 显式声明空的构造函数有时候也是一种很好的习惯。当你要使用反射时,一定不要忘记空的构造。...因此这个UserInfo的实例是通过Class的实例得到的 */ public class UserInfo { private int userId;...
  • 一个实例化还是需要调用它的构造函数的,这次我们利用反射来推理出的构造方法以及利用构造函数来实例化对象 创造一个:Apple Apple package javabase.entity; import javabase.service.Grow; import java...
  • private String name; public People(){ this.name = "默认名字"; } public People(String str) { name = str; } public String getName() { return name; } publ...
  • (3)通过反射实例化一个;(4)通过克隆实例化一个;(5)通过反序列化实例化一个;(6)通过Unsafe实例化一个;Let us 直接上代码:public class InstantialTest { private static...
  • 先定义一个SUser,方便以后的测试。代码如下: package com.wjl.reflect; public class SUser { private String userName; private String passWord; public SUser(){//无参构造方法 } public ...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 250
精华内容 100
关键字:

反射实例化private类