public @interface ,@interface 这个是啥意思??

哀木落 2011-11-30 10:30:03
@interface 求解~~~
...全文
7855 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
哀木落 2011-11-30
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 funfenffun 的回复:]

@override,lz别写错
lz是不是都没怎接触过java已经定义好的一些注解,没怎么用过

自定义注解的话主要就3件事
1.定义注解
Java code

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test { }


htt……
[/Quote]

太感谢啦,加上注释清楚了许多,反射还是有些了解的,用的时候不多,就是注释比较陌生呀~~
自定义的注解使用都会和反射有关还是看情况区别呀?
funfenffun 2011-11-30
  • 打赏
  • 举报
回复
@override,lz别写错
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自己看资料吧,这个一时半会讲不清楚的
哀木落 2011-11-30
  • 打赏
  • 举报
回复


我现在对于注解的了解就只明白上面nizhicheng兄提到的@overwrite的那样

@overwrite
public valutype methodname(param){...}这样

那这个@interfaceTest 会怎么工作呢?这个还是挺模糊的

@interfaceTest
public valutype methodname(param){...} 可以举例说一下吗?

funfenffun兄给的那篇文章看得不太明白呀
funfenffun 2011-11-30
  • 打赏
  • 举报
回复
@interfaceTest(...)
可能要加一些参数,这个就看lz怎么定义这个注解了
nizhicheng 2011-11-30
  • 打赏
  • 举报
回复
对的
[Quote=引用 12 楼 a4391qq 的回复:]

引用 9 楼 funfenffun 的回复:

public @interface xxx 定义注解
public interface xxx 定义接口
@interface和interface是完全不一样的,两码事


是不是说我这样定义 public @interface interfaceTest{...}
之后的可以这样用?@interfaceTest?
[/Quote]
哀木落 2011-11-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 funfenffun 的回复:]

public @interface xxx 定义注解
public interface xxx 定义接口
@interface和interface是完全不一样的,两码事
[/Quote]

是不是说我这样定义 public @interface interfaceTest{...}
之后的可以这样用?@interfaceTest?
nizhicheng 2011-11-30
  • 打赏
  • 举报
回复
一开始我的理解错了
你说的应该是 这种 public @interface XXX 这根本跟interface 不是同一个东西
@interface 不是interface,是注解类

是jdk1.5之后加入的,java没有给它新的关键字,所以就用@interface 这么个东西表示了
这个注解类,就是定义一个可用的注解,包括这个注解用于什么地方,是类,还是方法,还是property,还是方法入参等等,还有这个注解是否编译后进入class
比如我们知道的用于javadoc的注解,是不进入class文件的。然后在后面你就可以用这个注解写代码了。

总的来说,这就是一个生成javadoc时用到的注释类
哀木落 2011-11-30
  • 打赏
  • 举报
回复
第一次接触这个批注呀,谢谢大家的解答,有个大概的认识啦~~~
funfenffun 2011-11-30
  • 打赏
  • 举报
回复
public @interface xxx 定义注解
public interface xxx 定义接口
@interface和interface是完全不一样的,两码事
funfenffun 2011-11-30
  • 打赏
  • 举报
回复
public @interface xxx 定义注解
public interface xxx 定义接口
这是两码事,完全不一样的,lz别被搞混了
nizhicheng 2011-11-30
  • 打赏
  • 举报
回复
那可以试试 在子类的某个方法上加@Override这个 如果被继承父类中没有同样的方法 编译器就会报错·~但是 子类中把@Override去掉 相当于子类就用了2个方法
funfenffun 2011-11-30
  • 打赏
  • 举报
回复
@interface是用来自定义JAVA Annotation的语法,
@interface是用来自定义注释类型的

注释类型的定义跟定义一个接口相似,我们需要在 interface这个关键字前面加上一个@符号,即@interface。

注释中的每一个方法定义了这个注释类型的一个元素,注释中方法的声明中一定不能包含参数,也不能抛出异常;方法的返回值被限制为简单类型、String、Class、emnus、注释,和这些类型的数组。方法可以有一个缺省值。

http://wutheringsea.iteye.com/blog/1045817
哀木落 2011-11-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 nizhicheng 的回复:]

@ 这种 叫批注~~~ 又来注释下面的方法或者类特殊之处~~
如果类上加了这个@interface 说明下面的这个类应该是一个接口~~如果类中没有遵照接口的定义的话 编译器就会报错~~~
批注这个东西感觉是用来规范代码避免一些人为的失误 ~
[/Quote]

那直接写 public inteface不是一样吗?如果没写规范 eclipse也会报错呀
nizhicheng 2011-11-30
  • 打赏
  • 举报
回复
当然批注可以有一些特殊的用来,给某些属性加上不同的批注,可以自定义根据不同的批注实现不同的代码~~不过也只是充当表示作用~不过可以做一些封装 倒是可以优化开发效率
哀木落 2011-11-30
  • 打赏
  • 举报
回复
public @interface 这样写的呀,在创建类应该不是注解了吧
nizhicheng 2011-11-30
  • 打赏
  • 举报
回复
@ 这种 叫批注~~~ 又来注释下面的方法或者类特殊之处~~
如果类上加了这个@interface 说明下面的这个类应该是一个接口~~如果类中没有遵照接口的定义的话 编译器就会报错~~~
批注这个东西感觉是用来规范代码避免一些人为的失误 ~
sunnylyy 2011-11-30
  • 打赏
  • 举报
回复
annotation

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧