精华内容
下载资源
问答
  • Java策略模式+反射动态创建对象

    千次阅读 2016-10-08 18:46:52
    Java策略模式+反射动态创建对象

    Java的反射机制使得对象可以在运行期间被动态创建。如果一个功能有很多种算法或者策略,可以使用策略模式,对于不同的条件创建不同的策略,如果策略会拓展,可以利用反射来减少条件判断。

    1.接口

    package com.yy.test.reflection;
    
    public interface IHandler {
    
    	public void handle();
    }
    
    

    2.具体的策略类

    package com.yy.test.reflection;
    
    public class HandlerStrategyOne implements IHandler{
    
    	public void handle() {
    		System.out.println("HandlerStrategyOne handle");
    	}
    
    }
    
    
    package com.yy.test.reflection;
    
    public class HandlerStrategyTwo implements IHandler{
    
    	public void handle() {
    		System.out.println("HandlerStrategyTwo handle");
    	}
    
    }
    
    

    3.测试类

    package com.yy.test.reflection;
    
    public class HandlerTest {
    
    	public static void main(String[] args) {
    		String classPrefix = "com.yy.test.reflection.HandlerStrategy";
    		String postfix = "One";
    		String className = classPrefix + postfix;
    		Class clazz;
    		try {
    			clazz = Class.forName(className);
    			IHandler handler = (IHandler) clazz.newInstance();
    			handler.handle();
    		} catch (Exception e) {
    			System.out.println("HandlerTest.main error:"+e);
    		}
    		
    		
    	}
    }
    
    
    展开全文
  • JAVA反射机制创建对象

    千次阅读 2017-12-15 16:04:49
    java语言并不是一种动态语言,也就是说在运行时不能改变程序结构或者变量类型,但是JAVA提供了反射技术,可以让我们在运行时加载所需要的类。反射的英文单词是reflect,也可以翻译成为映像,个人认为叫映像可能更好...
    在实际开发过程中,JAVA的反射技术应用广泛,尤其是在一些广泛使用的框架中,如Spring、mybatis中更是大量使用。java语言并不是一种动态语言,也就是说在运行时不能改变程序结构或者变量类型,但是JAVA提供了反射技术,可以让我们在运行时加载所需要的类。反射的英文单词是reflect,也可以翻译成为映像,个人认为叫映像可能更好理解一些。反射技术就是在程序运行时将所需要的类通过Class.forname将类影响交给使用者使用。先看一下使用new创建类对象的方式:
    public class newServiceImpl {
        private String name;
        public newServiceImpl(){
        }
        public newServiceImpl(String name){
            this.name = name;
        }
        
        public void sayHello(String name){
            System.err.println("Hello " + name);
        }
        
        public void sayHello(){
            System.err.println("Hello " + this.name);
        }
    }
    在newServiceImpl类中,有两个构造函数和两个sayHello方法,使用这个类的方法如下:
    public class NewTest {
    public static void main(String[] args) {
    	// TODO Auto-generated method stub
    		
    	newServiceImpl ns1 = new newServiceImpl("newService");
    	ns1.sayHello();
    	newServiceImpl ns2 = new newServiceImpl();
    	ns2.sayHello("newService2");
        }
    }
    在设立我们使用了new关键字来创建类对象,这时,在编译的时候就会将newServiceImpl类加载进来并且构造。而反射机制,可以这样操作:
    package com.springstudy.reflect;
    public class ReflectServiceImpl {
    private String name;
    public ReflectServiceImpl(){
    }
    public ReflectServiceImpl(String name){
        this.name = name;
    }
    public void sayHello(){
        System.err.println("Hello " + this.name);
    }
    public void sayHello(String name){
        System.err.println("Hello " + name);
    }
    使用这个类:
    import java.lang.reflect.InvocationTargetException;
    public class ReflectTest {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ReflectServiceImpl rs1 = getInstance();
        rs1.sayHello("reflectservice1");
        ReflectServiceImpl rs2 = getInstance2();
        rs2.sayHello();
    }
    public static ReflectServiceImpl getInstance(){
        ReflectServiceImpl object = null;
        try{
            object = (ReflectServiceImpl)Class.forName("com.springstudy.reflect.ReflectServiceImpl").newInstance();
        }catch(ClassNotFoundException|InstantiationException|IllegalAccessException ex){
            ex.printStackTrace();
        }
        return object;
    }
    public static ReflectServiceImpl getInstance2(){
        ReflectServiceImpl object = null;
        try{
    object = (ReflectServiceImpl)Class.forName("com.springstudy.reflect.ReflectServiceImpl").
    getConstructor(String.class).newInstance("reflectservice2");
    }catch (ClassNotFoundException | InstantiationException 
    | IllegalAccessException | NoSuchMethodException 
    | SecurityException | IllegalArgumentException 
    | InvocationTargetException ex) {
        ex.printStackTrace();
        }
        return object;
        }
    }
    JAVA的反射机制是通过java.lang.reflect.*来实现的,在这里,我们使用
    (ReflectServiceImpl)Class.forName("com.springstudy.reflect.ReflectServiceImpl").newInstance();
    (ReflectServiceImpl)Class.forName("com.springstudy.reflect.ReflectServiceImpl").getConstructor(String.class).newInstance("reflectservice2");
    在运行的时候来构造无参数构造器或有参数构造器的对象,实现运行时创建使用类对象的方式,这就是通过JAVA的反射机制来创建对象的方法,JAVA的反射机制内部实现非常的复杂,感兴趣的人可以在网上找资料看看它的实现机制。

    展开全文
  • 主要介绍了java通过反射创建对象并调用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 利用java反射机制动态创建对象

    千次阅读 2011-10-22 17:51:15
    // 把JSON string 转化成类的对象public static T bindModel(String content, Class cls) { try { JSONObject mjson = new JSONObject(content); try { T instance = cls.newInstance(); Iterator ...
    // 把JSON string 转化成类的对象
    
    public static <T> T bindModel(String content, Class<T> cls) {
    		try {
    			JSONObject mjson = new JSONObject(content);
    			try {
    				T instance = cls.newInstance();
    				Iterator it = mjson.keys();
    				while (it.hasNext()) {
    					String next = it.next().toString();
    					ModelReflector.setProperty(instance, next, mjson.get(next)
    							.toString());
    				}
    				return instance;
    			} catch (IllegalAccessException e) {
    			} catch (InstantiationException e) {
    			}
    		} catch (JSONException e) {
    		}
    		return null;
    	}

    // 按JavaBean模式修改对象的field值

    public class ModelReflector {
    
    	public static Object setProperty(Object bean, String propertyName,
    			Object value) {
    		Class clazz = bean.getClass();
    		try {
    			Field field = clazz.getDeclaredField(propertyName);
    			Method method = clazz.getDeclaredMethod(
    					getSetterName(field.getName()),
    					new Class[] { field.getType() });
    			return method.invoke(bean, new Object[] { value });
    		} catch (Exception e) {
    		}
    		return null;
    	}
    
    	public static String getGetterName(String propertyName) {
    		String method = "get" + propertyName.substring(0, 1).toUpperCase()
    				+ propertyName.substring(1);
    		return method;
    	}
    
    	public static String getSetterName(String propertyName) {
    		String method = "set" + propertyName.substring(0, 1).toUpperCase()
    				+ propertyName.substring(1);
    		return method;
    	}
    }

    上面是通过发射方法修改对象的field,

    能不能直接通过field.set(bean, value); 修改呢?

    展开全文
  • JAVA反射强转创建对象

    千次阅读 2017-07-26 17:38:57
    public T creatProduct(Class clz) { Api api=null; try { api=(Api) Class.forName(clz.getName()).newInstance(); } catch (InstantiationException | IllegalAccessEx
        public <T extends Api> T creatProduct(Class<T> clz)
        {
            Api  api=null;
            try {
                api=(Api) Class.forName(clz.getName()).newInstance();
            } catch (InstantiationException | IllegalAccessException
                    | ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return (T)api;
        }
    

    展开全文
  • 实现类: ... import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; ...* @ClassName: ConstructorTest * @Description: 通过反射技术动态创建对象(有参、无参构造) * @auth...
  • Java通过反射创建对象

    万次阅读 2012-07-26 15:50:01
    java可以在运行时动态获取某个类的类信息,这就是java反射。 一、通过反射创建不带参数的对象 这个比较简单,不需要获取这个类的构造方法类,不需要指明构造参数的参数列表。下面是要使用的类和方法,使用步骤...
  • java 中通过反射创建对象
  • 在开发过程中经常会遇到java对象的属性特征不确定的情况,比如属性的名称,属性的类型,属性的取值等不确定的情况,如何在java运行时获取这些信息?...借助java反射机制以及javassist能够轻松解决这些问题。
  • java基础-反射3(反射反射创建对象,操作对象属性,调用对象方法)前面通过学习,我们了解的运行时类型信息的基本原理,以及通过Class对象和反射来获取运行时类型信息。下面来了解通过反射创建对象,以及操作...
  • class Demo { public static void main(String[] args) { ... //根据类名获取Class对象 Class c = Class.forName("Test"); //参数类型数组 Class[] parameterTypes={int.class,int.class}; /
  • 下面小编就为大家带来一篇Java通过反射机制动态设置对象属性值的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 简单介绍Java反射原理Java反射机制是Java特性之一,反射机制是构建框架技术的基础所在。Java程序要能够运行,java虚拟机需要事先加载java类,目前我们的程序在编译期就已经确定哪些java类需要被加载。Java反射...
  • Java反射机制和对象序列化

    千次阅读 2015-06-26 12:08:13
     JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。  ...
  • 一、java反射机制概述 Reflection (反射)被视为动态语言的关键,为什么这么说呢,是因为它在运行时就确定下来了。反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的...
  • Java反射

    万次阅读 多人点赞 2019-08-28 22:58:42
    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性。这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。 用途 ...
  • 动态创建对象,并给对象属性赋值

    千次阅读 2018-07-24 10:04:28
    在开发过程中经常会遇到java对象的...借助java反射机制以及javassist能够轻松解决这些问题。 简单介绍Java的反射原理  Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。Java程序要能够运行,j...
  • JAVA反射机制 java反射机制是在运行状态中,对于任意一个类, 能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用他的任意一个方法和属性。这种动态获取的信息以及动态调用对象的方法的功能称为JAVA语言...
  • - java可通过5种来创建实例化一个对象(new、反射、Class.forName、clone、序列化),多的不讲,就说说反射与Class.forName - 从下面的代码可分析出如果在当前类没有加载到jvm前,代码中步骤1、2、3在没有调用new...
  • 深入理解Java类型信息(Class对象)与反射机制

    万次阅读 多人点赞 2017-05-01 23:19:19
    【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) ...深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解
  • java 反射有什么好处 直接简单粗暴地去创建对象调需要的方法不是很简洁吗 java 反射有什么好处 直接简单粗暴地去创建对象调需要的方法不是很简洁吗
  • java反射动态代理详解

    千次阅读 2017-09-29 09:50:05
    动态代理 反射
  • Java反射】Java动态性——反射机制

    万次阅读 2019-08-03 10:43:38
    代码 ... /* ...动态创建对象 */ public class ReflectTest { public static void main(String[] args) throws Exception { // 1. 三种方式获取对象信息 // (1)对象.getclass Cl...
  • 通过反射机制调用对象的某个方法 -- 将一个对象的属性值赋值给另一个对象的属性开发环境创建对象UserOne、UserTwo编写基于反射的工具类测试结果预留占位 模拟一个场景: 众所周知,EasyExcel导出Excel文档是依赖于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,569
精华内容 46,227
关键字:

java反射动态创建对象

java 订阅