反射的初步运用

/**
 * 反射应用
 * 1.创建泛型接口和实现接口的方法
 * 2.创建一个工厂类方法,根据参数对象返回不同的实例化类
 * 3.通过主函数提供的完整类名获取各接口类的实现方法
 * @author Administrator
 *
 */
interface IFruit {
    public void eat();
}
interface IGreens {
    public void eat();
}
class Apple implements IFruit {
    public void eat() {
        System.out.println("吃苹果");
    }
}
class Banana implements IFruit {
    public void eat() {
        System.out.println("吃香蕉");
    }
}
class Lem implements IGreens {
    public void eat() {
        System.out.println("吃西红柿");
    }
}
class Csl implements IGreens {
    public void eat() {
        System.out.println("吃黄瓜");
    }
}
class Factory {
    private Factory() {}
        //返回值类型为泛型T,
        public static <T> T getInstance(String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
            T obj= null;
            obj = (T) Class.forName(className).newInstance();    //通过类文件名获取该类class信息并实例化该类
            return obj;
        }
}
class TestDemo {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
        IFruit fruit = Factory.getInstance("cn.mldn.demo.Apple");    //把类文件作为参数调用工厂方法返回实例化的泛型类并通过向上转型设置泛型类型
        fruit.eat();//父类访问子类重写方法
        IGreens greens = Factory.getInstance("cn.mldn.demo.Csl");    //泛型转为IGreens
        greens.eat();
    }

}

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/*
 * Contructors应用
 */
interface IMessage {}
interface IBlue {
     void fun();
}
class Person implements IMessage,IBlue{
    public void fun() {
        System.out.println("fun()方法");
    }
    public Person(String name) {
        System.out.println(name);
    }
}

public class Test {
    public static void main(String args[]) throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
        Class<?> cls = Person.class;
        System.out.println(cls.getSuperclass());    //获取父类对象
        Class<?>[] itf = cls.getInterfaces();    //获取类的实现接口方法
        Constructor<?> conts[] = cls.getConstructors();//获取类的构造方法
        Constructor<?> cont = cls.getConstructor(String.class);    //获取有参构造(new String()).getClass()
//        Object obj = cls.newInstance();    //调用无参构造实例化该类
        cont.newInstance("张三");    
        for(int x = 0;x < itf.length;x ++) {
            System.out.println(itf[x].getName());    
        }
        for(int x = 0;x < conts.length;x ++) {
            System.out.println(conts[x]);
        }
        
    }    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值