Java 我们如何编写注释
我对注释的用法非常陌生。 有谁能告诉我,我们如何声明一个注释,以及如何调用使用该注释声明的所有方法/变量 我使用java来实现这个注释Java 我们如何编写注释,java,annotations,Java,Annotations,我对注释的用法非常陌生。 有谁能告诉我,我们如何声明一个注释,以及如何调用使用该注释声明的所有方法/变量 我使用java来实现这个注释 import java.lang.annotation.ElementType; import java.lang.annotation.Target; @Target(ElementType.FIELD) public @interface isAnnotatedVariable { String varName(); } 并在中使用注释 publ
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
public @interface isAnnotatedVariable {
String varName();
}
并在中使用注释
public class Example {
@isAnnotatedVariable(varName = "S")
public String var;
@isAnnotatedVariable(varName = "S")
public String var1;
}
并尝试使用
public class BuildStepClassDetector {
public static void main(String[] args) throws IOException {
BuildStepClassDetector build = new BuildStepClassDetector();
final Logger4J logger = new Logger4J(build.getClass().getName());
final HashMap<String, Class<?>> isAnnotatedVariables = new HashMap<String, Class<?>>();
final TypeReporter reporter = new TypeReporter() {
@SuppressWarnings("unchecked")
@Override
public Class<? extends Annotation>[] annotations() {
return new Class[] { isAnnotatedVariable.class };
}
@SuppressWarnings("unchecked")
@Override
public void reportTypeAnnotation(Class<? extends Annotation> arg0, String arg1) {
Class<? extends isAnnotatedVariable> isAnnotatedVariableClass;
try {
isAnnotatedVariableClass = (Class<? extends isAnnotatedVariable>) Class.forName(arg1);
isAnnotatedVariables.put(
isAnnotatedVariableClass.getAnnotation(isAnnotatedVariable.class).varName(),
isAnnotatedVariableClass);
} catch (ClassNotFoundException e) {
logger.getStackTraceString(e);
}
}
};
final AnnotationDetector cf = new AnnotationDetector(reporter);
cf.detect();
System.out.println(isAnnotatedVariables.keySet());
}
}
公共类BuildStepClassDetector{
公共静态void main(字符串[]args)引发IOException{
BuildStepClassDetector build=新建BuildStepClassDetector();
final Logger4J logger=new Logger4J(build.getClass().getName());
最终HashMap>();
最终TypeReporter=新的TypeReporter(){
@抑制警告(“未选中”)
@凌驾
public类下面是一个使用反射声明注释和检索注释字段的简单示例
package asif.hossain;
import java.lang.annotation.*;
import java.lang.reflect.Field;
/**
*
* Created by sadasidha on 21-Aug-14.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@interface MyAnnotation {
public String value();
}
class TestClass
{
@MyAnnotation("This is a name field")
public String name;
}
public class Main {
public static void main(String ... args) throws IllegalAccessException {
TestClass testObject = new TestClass();
Field[] fields = testObject.getClass().getFields();
for (Field field : fields)
{
Annotation annotation = field.getAnnotation(MyAnnotation.class);
if(annotation instanceof MyAnnotation)
{
System.out.println(field.getName());
// get field value
String value = (String)field.get(testObject);
System.out.println("Field Value = "+ value);
//Set field value
field.set(testObject,"Your Name");
System.out.println(testObject.name);
}
}
}
}
您可以按照本教程学习有关注释和反射的更多信息。1.您使用的是哪种语言?2.您尝试了什么。3.是什么导致了问题?4.您询问的是哪种注释?…简单地说……“不清楚您询问的是什么”如果我们想使用该字段,我们可以怎么做?例如,如果我想更新“name”,我们可以怎么做(我的意思是不直接更新name=“something”)field.get(testObject),field.set(testObject,“value”)来获取和设置值。请参阅我更新的答案。
package asif.hossain;
import java.lang.annotation.*;
import java.lang.reflect.Field;
/**
*
* Created by sadasidha on 21-Aug-14.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@interface MyAnnotation {
public String value();
}
class TestClass
{
@MyAnnotation("This is a name field")
public String name;
}
public class Main {
public static void main(String ... args) throws IllegalAccessException {
TestClass testObject = new TestClass();
Field[] fields = testObject.getClass().getFields();
for (Field field : fields)
{
Annotation annotation = field.getAnnotation(MyAnnotation.class);
if(annotation instanceof MyAnnotation)
{
System.out.println(field.getName());
// get field value
String value = (String)field.get(testObject);
System.out.println("Field Value = "+ value);
//Set field value
field.set(testObject,"Your Name");
System.out.println(testObject.name);
}
}
}
}