java注解实例(三)--实现自己的override

          首先,定义注解。注解是不干活的,干活的只是获取注解的方法,如反射:

package Java201512;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**  
 *  MyOverride : 
 * @author xuejupo  [email protected] 
 * create in 2015-12-12 上午9:05:12    
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyOverride {

}

 获取注解并分析:

package Java201512;

import java.lang.reflect.Method;

/**  
 *  MyOverrideTest : 
 * @author xuejupo  [email protected] 
 * create in 2015-12-12 上午9:06:43    
 */

public class MyOverrideTest {
	public static void main(String[] s) throws ClassNotFoundException{
		Class myClass = childClass.class;
		//获取类的所有方法
		Method[] methods = myClass.getMethods();
		Class mySuperClass = myClass.getSuperclass();
		//遍历类的所有方法
		for(Method method:methods){
			//如果该类有MyOverride注解
			if(method.isAnnotationPresent(MyOverride.class)){
				Class<?>[] types = method.getParameterTypes();
				try {
					Method m = mySuperClass.getMethod(method.getName(), types);
					if(m == null){
						System.out.println("方法"+method.getName()+"不合法");
					}
				} catch (SecurityException e) {
					System.out.println("方法"+method.getName()+"不合法,您无法继承父类同方法");
					// TODO Auto-generated catch block
				} catch (NoSuchMethodException e) {
					// TODO Auto-generated catch block
					System.out.println("方法"+method.getName()+"不合法,用了override,但是父类无此方法");
				}
			}
		}
	}
}
class superClass{
	public void myOverrideTest(){
	}
}
class childClass extends superClass{
	@MyOverride
	public void myOverrideTest(){
		
	}
	
	@MyOverride
	public void myOverrideTest(int i){
		
	}
	
	@MyOverride
	public void myOverrideTestNotFound(){
		
	}
}

 简单得实现一下override.

结果:

方法myOverrideTest不合法,用了override,但是父类无此方法
方法myOverrideTestNotFound不合法,用了override,但是父类无此方法

猜你喜欢

转载自709002341.iteye.com/blog/2263585