是不是说我这样定义 public @interface interfaceTest{...} 之后的可以这样用?@interfaceTest?
@interfaceTest(...) 可能要加一些参数,这个就看lz怎么定义这个注解了
我现在对于注解的了解就只明白上面nizhicheng兄提到的@overwrite的那样@overwrite public valutype methodname(param){...}这样那这个@interfaceTest 会怎么工作呢?这个还是挺模糊的@interfaceTest public valutype methodname(param){...} 可以举例说一下吗?funfenffun兄给的那篇文章看得不太明白呀
如果类上加了这个@interface 说明下面的这个类应该是一个接口~~如果类中没有遵照接口的定义的话 编译器就会报错~~~
批注这个东西感觉是用来规范代码避免一些人为的失误 ~
那直接写 public inteface不是一样吗?如果没写规范 eclipse也会报错呀
@interface是用来自定义注释类型的注释类型的定义跟定义一个接口相似,我们需要在 interface这个关键字前面加上一个@符号,即@interface。注释中的每一个方法定义了这个注释类型的一个元素,注释中方法的声明中一定不能包含参数,也不能抛出异常;方法的返回值被限制为简单类型、String、Class、emnus、注释,和这些类型的数组。方法可以有一个缺省值。http://wutheringsea.iteye.com/blog/1045817
public interface xxx 定义接口
这是两码事,完全不一样的,lz别被搞混了
public interface xxx 定义接口
@interface和interface是完全不一样的,两码事
你说的应该是 这种 public @interface XXX 这根本跟interface 不是同一个东西
@interface 不是interface,是注解类 是jdk1.5之后加入的,java没有给它新的关键字,所以就用@interface 这么个东西表示了
这个注解类,就是定义一个可用的注解,包括这个注解用于什么地方,是类,还是方法,还是property,还是方法入参等等,还有这个注解是否编译后进入class
比如我们知道的用于javadoc的注解,是不进入class文件的。然后在后面你就可以用这个注解写代码了。总的来说,这就是一个生成javadoc时用到的注释类
是不是说我这样定义 public @interface interfaceTest{...}
之后的可以这样用?@interfaceTest?
可能要加一些参数,这个就看lz怎么定义这个注解了
public valutype methodname(param){...}这样那这个@interfaceTest 会怎么工作呢?这个还是挺模糊的@interfaceTest
public valutype methodname(param){...} 可以举例说一下吗?funfenffun兄给的那篇文章看得不太明白呀
lz是不是都没怎接触过java已经定义好的一些注解,没怎么用过自定义注解的话主要就3件事
1.定义注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test { }
http://www.blogjava.net/livery/articles/203096.html
2.加注解到方法上,也可能是类上,变量上
public class Foo {
@Test public static void m1() { }
public static void m2() { }
@Test public static void m3() {
throw new RuntimeException("Boom");
} public static void m4() { } @Test public static void m5() { } public static void m6() { } @Test public static void m7() {
throw new RuntimeException("Crash");
} public static void m8() { }
}
3.使用注解
这就涉及到反射的东西,lz去查java反射机制的东西吧
import java.lang.reflect.*;
public class RunTests {
public static void main(String[] args) throws Exception {
int passed = 0, failed = 0;
for (Method m : Class.forName(args[0]).getMethods()) {
if (m.isAnnotationPresent(Test.class)) { //if(方法有@Test注解)
try {
m.invoke(null);
passed++;
} catch (Throwable ex) { //方法里抛出异常
System.out.printf("Test %s failed: %s %n", m, ex.getCause());
failed++;
}
}
}
System.out.printf("Passed: %d, Failed %d%n", passed, failed);
}
}
lz要会写注解,会用反射调注解lz自己看资料吧,这个一时半会讲不清楚的