注解——一些不懂的地方
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyTest {
}
public class MyTestFunction {
public static void main(String[] args) throws Exception {
Class<JunitTest01> c = JunitTest01.class;
Method[] ms = c.getDeclaredMethods();
for (Method m : ms) {
//得到所有注解 装到数组里面
Annotation[] annos = m.getDeclaredAnnotations();
//对所有注解遍历
for (Annotation anno : annos) {
//判断是否为注解
if(anno instanceof MyTest){
m.invoke(c.newInstance());
}
}
}
}
}
public class Test01 {
注解的作用
-
如果需要有功能,我们得结合反射去写功能。
-
需求:
-
定义注解:用在方法上,能批量执行被标记的所有方法。相当于Test批量测试。
-
功能执行被标记得方法,
-
-
实现思路:
-
查找测试类中哪个方法用到了该注解
-
反射获取类中有哪些方法。
-
遍历方法,获取方法上的所有注解。
-
判断,是该注解 instanceof
-
如果是,invoke
-
-
我们可以通过反射判断方法是否标有我们的@MyTest注解,这样我们就可以只运行带有特定注解的方法。
不过写完上面的代码之后,我在想,我们很多时候写方法,里面都会带一些参数,而通过上面的方法调用带注解方法时,我们无法针对参数的个数不同从而对症下药,所以我们应该可以通过反射获取参数的个数以及参数的形式,再通过循环之类的方法,利用注解调用方法。
其实我也不确定可不可行,emmm试试看主要是,算是记录一下情况吧。
对注解的尝试
public class Test01 {
public class MyTestFunction {
public static void main(String[] args) throws Exception {
Class<Test01> c = Test01.class;
Method[] ms = c.getDeclaredMethods();
for (Method m : ms) {
//得到所有注解 装到数组里面
Annotation[] annos = m.getDeclaredAnnotations();
//对所有注解遍历
for (Annotation anno : annos) {
//判断是否为注解
if (anno instanceof MyTest) {
Type[] pgt = m.getGenericParameterTypes();
for (Type type : pgt) {
System.out.println(type);
// System.out.println(type.getTypeName());
// m.invoke(c.newInstance());
}
}
}
}
}
}
大概是弄成了这个样子,通过输出type跟type.getTypeName(),可以发现输出的正是我@MyTest注解方法的参数类型,按理讲之后应该是由于不确定参数个数所以加个循环,不确定每个方法的参数类型所以加判断,不过一时间发现好像无法判断一个值是否是String类型,是否是int类型,其实原本是想跟注解一样用instancof,不过好像不行,突然就尬住了,虽然能输出参数类型但不知道如何判断参数类型,以后有机会再想想吧,感觉越想越麻烦了。
单元测试
标一个单元测试进来,总感觉以后会不太记得
单元测试属于程序员的自测。一般用在增删改查数据的测试上。
-
导包junit4.jar,第三方写的。
-
写一个测试类功能模块区分,UserTest
-
写一个测试方法,testAdd()
-
public void testXxxxx(){}
-
公有权限,没有返回值,无参。
-
-
在方法上加Test注解。
public class Demo01 {

浙公网安备 33010602011771号