反射

来源:互联网 发布:海西商品交易所软件 编辑:程序博客网 时间:2024/05/16 16:14

反射反射,程序员的快乐。
即用反射可以实现运行时调用相应实例,java的反射很简单,来看直接调用class实现反射的代码:

public class User {    private int _id;    private String name;    public void setID(int id) {        _id = id;    }    public int getID() {        return _id;    }    public void setName(String name) {        this.name = name;    }    public String getName() {        return name;    }}
public interface IUser {    void insert(User user);    User getUser(int id);}
public class AccessUser implements IUser {    @Override    public void insert(User user) {        System.out.println("在Access Server中给User添加一条记录");    }    @Override    public User getUser(int id) {        System.out.println("在Access Server中根据ID获取User表一条记录");        return null;    }}
public class SqlServerUser implements IUser {    @Override    public void insert(User user) {        System.out.println("在SQL Server中给User添加一条记录");    }    @Override    public User getUser(int id) {        System.out.println("在SQL Server中根据ID获取User表一条记录");        return null;    }}
public class DataAccess {    private static final String packageName = "reflection";    private static final String db          = "SqlServer";    public static IUser CreateUser() {        String className = packageName + "." + db + "User";        try {            Class user = Class.forName(className);            return (IUser) user.newInstance();        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        } catch (InstantiationException e) {            e.printStackTrace();        }        return null;    }}

直接用Class.forName(className)得到className对应的类,然后newInstance()实例化;
className是变量,可以通过配置文件读取,最常用的配置方式是xml。
利用xml配置文件实现反射的方法下次再来完善。
还有一些获取类中属性变量、构造函数和函数的方法以后用到反射的时候用一下就能熟悉了,没什么神秘的地方。

既然有了反射感觉抽象工厂模式,即对不同类型的工厂进行抽象的方式已经没有用了?

0 0