您的位置:首页 > 娱乐 > 八卦 > 小米发布会直播在线_代办记账代理公司_专业软文发稿平台_电商关键词工具

小米发布会直播在线_代办记账代理公司_专业软文发稿平台_电商关键词工具

2025/2/24 2:54:48 来源:https://blog.csdn.net/weixin_35691921/article/details/141232949  浏览:    关键词:小米发布会直播在线_代办记账代理公司_专业软文发稿平台_电商关键词工具
小米发布会直播在线_代办记账代理公司_专业软文发稿平台_电商关键词工具

使用自定义注解标注当前类

    • 举个例子
      • 1. 自定义注解`FragmentSetting`
      • 2. 抽象基类`BaseFragment`
      • 3. 具体的`Fragment`类
      • 4. 测试类
    • 自定义注解是如何定义的

举个例子

1. 自定义注解FragmentSetting

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface FragmentSetting {String path();String group();
}

2. 抽象基类BaseFragment

public abstract class BaseFragment {private String path;private String group;public BaseFragment() {FragmentSetting annotation = this.getClass().getAnnotation(FragmentSetting.class);if (annotation!= null) {this.path = annotation.path();this.group = annotation.group();}}public String getPath() {return path;}public String getGroup() {return group;}
}

3. 具体的Fragment

@FragmentSetting(path = "/home", group = "main")
public class HomeFragment extends BaseFragment {
}@FragmentSetting(path = "/settings", group = "config")
public class SettingsFragment extends BaseFragment {
}

4. 测试类

public class Main {public static void main(String[] args) {HomeFragment homeFragment = new HomeFragment();System.out.println("HomeFragment - Path: " + homeFragment.getPath());System.out.println("HomeFragment - Group: " + homeFragment.getGroup());SettingsFragment settingsFragment = new SettingsFragment();System.out.println("SettingsFragment - Path: " + settingsFragment.getPath());System.out.println("SettingsFragment - Group: " + settingsFragment.getGroup());}
}

在这个示例中:

  • FragmentSetting注解用于标注Fragment类,包含pathgroup属性。
  • BaseFragment抽象类在构造函数中通过反射获取FragmentSetting注解的值,并提供getPathgetGroup方法来获取这些值。
  • HomeFragmentSettingsFragment是具体的Fragment类,使用FragmentSetting注解标注,它们继承自BaseFragment,可以直接使用getPathgetGroup方法。
  • main方法中创建了HomeFragmentSettingsFragment的实例,并输出它们的pathgroup信息。

自定义注解是如何定义的

  1. 定义语法基础
    • 在Java中,自定义注解是通过@interface关键字来定义的。例如,public @interface MyAnnotation就定义了一个名为MyAnnotation的注解。
    • 注解本质上是一种特殊的接口,它的成员变量(也称为元素)默认是publicstaticfinal的。
  2. 元注解的使用
    • @Target
      • 这个元注解用于指定自定义注解可以应用的目标元素类型。例如
      • @Target(ElementType.TYPE)表示该注解可以用于类、接口、枚举等类型定义上;@Target(ElementType.METHOD)表示注解可以用于方法上;
      • @Target(ElementType.FIELD)表示可用于成员变量(字段)上。它的参数是ElementType枚举类型的值,这个枚举包含了多种元素类型,如TYPEMETHODFIELDPARAMETER(方法参数)、CONSTRUCTOR(构造方法)等。
    • @Retention
      • 用于指定注解的保留策略。有三种取值:RetentionPolicy.SOURCERetentionPolicy.CLASSRetentionPolicy.RUNTIME
      • RetentionPolicy.SOURCE表示注解只在源代码阶段保留,编译器在编译时会丢弃该注解,不会将其包含在字节码文件中。例如,一些用于代码检查的注解(如@Override在某些情况下)可以使用这种保留策略。
      • RetentionPolicy.CLASS表示注解在编译后的字节码文件中保留,但在运行时不能通过反射访问。这种策略用于一些在编译过程中有作用,但在运行时不需要的注解。
      • RetentionPolicy.RUNTIME表示注解在运行时仍然可以通过反射访问。这是最常用的策略之一,当需要在程序运行期间动态地获取和处理注解信息时,就需要使用这种保留策略,就像前面示例中的FragmentSetting注解,它可以在运行时获取路径和分组信息。
  3. 定义注解的成员变量(元素)
    • 注解可以包含成员变量,这些成员变量类似于接口中的方法定义。例如:
      public @interface MyAnnotation {String value() default "";int count() default 1;
      }
      
    • 这里定义了两个成员变量valuecount,它们都有默认值。在使用注解时,可以通过@MyAnnotation(value = "test", count = 3)这样的方式来指定成员变量的值,也可以省略成员变量的值,使用默认值,如@MyAnnotation(此时value""count1)。
    • 成员变量的类型可以是基本数据类型(byteshortintlongfloatdoublecharboolean)、String类型、Class类型、枚举类型以及以上类型的数组。例如:
      public @interface AnotherAnnotation {enum Color {RED, GREEN, BLUE}Color color() default Color.RED;Class<?> targetClass() default Object.class;
      }
      
    • 这个AnotherAnnotation注解包含了一个枚举类型的成员变量color和一个Class类型的成员变量targetClass,并分别指定了默认值。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com