编写代码实现java注解
时间: 2024-01-26 16:08:36 浏览: 75
下面是一个简单的Java注解的示例代码:
```java
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
String value();
int number() default 0;
}
```
这个注解有两个属性:`value`和`number`。其中`value`属性是必需的,而`number`属性是可选的,默认值为0。
下面是一个使用这个注解的示例:
```java
public class MyClass {
@MyAnnotation(value = "hello", number = 42)
public void myMethod() {
// method body
}
}
```
在这个例子中,`MyClass`类中的`myMethod()`方法被注解为`@MyAnnotation(value = "hello", number = 42)`。这意味着这个方法有一个`value`属性,值为`"hello"`,还有一个`number`属性,值为`42`。
相关问题
编写代码实现Java注解
好的,以下是一段用于自定义Java注解的示例代码:
```java
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME) // 设置注解保留时间为运行时
@Target(ElementType.METHOD) // 设置注解适用范围为方法
public @interface MyAnnotation {
String name() default ""; // 定义注解属性name,默认值为""
int age() default 0; // 定义注解属性age,默认值为0
}
```
这段代码定义了一个名为MyAnnotation的注解,该注解有两个属性:name和age。其中,name属性类型为String,age属性类型为int,两个属性都有默认值。
接下来是一个使用该注解的示例:
```java
public class MyClass {
@MyAnnotation(name = "张三", age = 20) // 使用自定义注解,设置name和age属性值
public void doSomething() {
// 方法内容
}
}
```
这段代码中,我们在doSomething()方法上使用了自定义注解MyAnnotation,并设置了name和age属性的值。在编译时,注解信息会被编译器存储在class文件中,运行时可以通过反射机制获取到注解信息。
java 利用注解实现策略模式代码
策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在Java中,可以使用注解来实现策略模式。以下是一个示例代码,展示如何使用注解实现策略模式。
首先,定义一个注解,用于标记策略类:
```
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Strategy {
String value();
}
```
这个注解有一个value属性,表示策略的名称。
接下来,定义一个策略接口:
```
public interface PaymentStrategy {
void pay(int amount);
}
```
然后,实现两个策略类:
```
@Strategy("creditCard")
public class CreditCardStrategy implements PaymentStrategy {
public void pay(int amount) {
System.out.println("Paying " + amount + " using credit card");
}
}
@Strategy("paypal")
public class PaypalStrategy implements PaymentStrategy {
public void pay(int amount) {
System.out.println("Paying " + amount + " using PayPal");
}
}
```
这两个类都使用了@Strategy注解,并且实现了PaymentStrategy接口。
现在,我们可以编写一个策略选择器来选择使用哪个策略:
```
public class PaymentContext {
private final Map<String, PaymentStrategy> strategies;
public PaymentContext() {
strategies = new HashMap<>();
ServiceLoader.load(PaymentStrategy.class).forEach(strategy -> {
Strategy strategyAnnotation = strategy.getClass().getAnnotation(Strategy.class);
if (strategyAnnotation != null) {
strategies.put(strategyAnnotation.value(), strategy);
}
});
}
public void pay(String strategyName, int amount) {
PaymentStrategy strategy = strategies.get(strategyName);
if (strategy == null) {
throw new IllegalArgumentException("Invalid strategy name: " + strategyName);
}
strategy.pay(amount);
}
}
```
这个类使用了Java的ServiceLoader来加载所有实现了PaymentStrategy接口的类,并根据它们的@Strategy注解来进行分类。然后,它提供了一个pay方法来执行支付操作,根据传入的策略名称来选择使用哪个策略。
最后,我们可以使用PaymentContext来执行支付操作:
```
PaymentContext context = new PaymentContext();
context.pay("creditCard", 100);
context.pay("paypal", 200);
```
这个代码将分别使用CreditCardStrategy和PaypalStrategy来支付100和200元。
通过使用注解来实现策略模式,我们可以避免使用大量的if-else语句或switch语句来选择使用哪个策略,使代码更加简洁、易于维护。
阅读全文