一般直接使用反射接口的并不多,一般用于辅助反射其他的,或者后面所说的代理.所以下面简单说一下,废话不多说,
步骤如下:
<1> : 新建一个Java工程,工程树如下:
<2> : 接口类IOneplusInterface.java如下:
/**
*
*/
package com.oneplus.interfaces;
/**
* @author zhibao.liu
* @date 2015-11-19
* @company : oneplus.Inc
*/
public interface IOneplusInterface {
void OneInterface();
void TwoInterface();
}
我们在里面声明两个接口.
<2> : OneplusInterfaceImpl.java类中如下:
/**
*
*/
package com.oneplus.impl;
import com.oneplus.interfaces.IOneplusInterface;
/**
* @author zhibao.liu
* @date 2015-11-19
* @company : oneplus.Inc
*/
public class OneplusInterfaceImpl implements IOneplusInterface{
@Override
public void OneInterface() {
// TODO Auto-generated method stub
}
@Override
public void TwoInterface() {
// TODO Auto-generated method stub
}
}
<3> : 主类中:
private static void OneplusInterfaceX(String packagename){
try {
Class clazz=Class.forName(packagename);
Class interfaces[]=clazz.getInterfaces();
for(int i=0;i<interfaces.length;i++){
Method[] methods=interfaces[i].getMethods();
for(int j=0;j<methods.length;j++){
System.out.println("Interface Method Name : "+methods[j].getName());
}
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
运行一下:
在上面做一个测试中,我们在再OneplusInterfaceImpl类中继续增加两个非接口的方法:
private void ThreeInterfaceImpl(){
}
private void FourInterfaceImpl(){
}
然后再运行:
结果还是一样的,但是如果我们再在主类中增加获取所有方法如下:
Method methods[]=clazz.getDeclaredMethods();
for(int i=0;i<methods.length;i++){
System.out.println("Method Name : "+methods[i].getName());
}
结果如下:
如果再新建一个IOneplusInterfaces.java,程序如下 :
/**
*
*/
package com.oneplus.interfaces;
/**
* @author zhibao.liu
* @date 2015-11-20
* @company : oneplus.Inc
*/
public interface IOneplusInterfaces extends IOneplusInterface {
void OneplusFunctionOne();
void OneplusFunctionTwo();
}
再让OneplusInterfaceImpl 也实现IOneplusInterfaces这个接口,如下 :
public classOneplusInterfaceImpl implements IOneplusInterface, IOneplusInterfaces
运行结果:
直接一般没有直接反射出来使用,进一步应用参考后面的代理的使用.