Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 注释到默认值_Java_Annotations - Fatal编程技术网

Java 注释到默认值

Java 注释到默认值,java,annotations,Java,Annotations,我在项目中有一个可见性问题,一旦我的实现作为接口不可见可见性问题无法解决。 我想到了一个解决办法: 我写了一张便条 @Target (ElementType.TYPE) @Retention (RetentionPolicy.RUNTIME) public @interface Register { } 我在课堂上使用它 @Register public class ClientAlteracaoObserver implements Complement <ClientGestaoVa

我在项目中有一个可见性问题,一旦我的实现作为接口不可见可见性问题无法解决。

我想到了一个解决办法:

我写了一张便条

@Target (ElementType.TYPE)
@Retention (RetentionPolicy.RUNTIME)
public @interface Register {
}
我在课堂上使用它

@Register
public class ClientAlteracaoObserver implements Complement <ClientGestaoValue>, IClienteAlteracaoObserver {
}
但是我想创建注释@Inject来完成Container.load(iclientealteracoobserver.class)的工作


虽然你想要的是可能的,但我不推荐。注释主要是元信息,主要在编译时处理。为此,需要编写注释处理器,必须将其传递给编译器,以便它能够处理注释。Baeldung有一个简单的构建器,它是通过注释处理器创建的

我提出了一种静态最终变量形式的替代方案:

public Class Test {
    public static final String DEFAULT_FIELD_VALUE = "example";
    private String field; // to ensure encapsulation, all attributes should be private

    public Test() {
        this(DEFAULT_FIELD_VALUE);
    }

    public Test(String field) {
        this.field = field;
    }

    public String getField() {
        return this.field;
    }

    public static void main(String... args) {
        System.out.println(new Test().getField().equals("example"));
    }
}
()

您可以将此方法与
静态
-块相结合,使配置更加灵活,例如从系统变量或配置文件中读取默认值

如果您的对象开始变得更复杂,您可以查看以寻求更灵活的解决方案


代码中的一点注释:由于数据封装,您不希望直接从外部访问类属性。因此,您不应该将它们设置为公共的。相反,写吧。

。。。你的问题是?我对创建注释不太熟悉,但是如果你在
字段
之后加上
默认的“示例”
,你可以用注释来完成。但这需要一些工作。或更像是大量的工作。您需要编写一个注释处理器。我建议使用
公共静态最终字符串默认值\u字段\u值=…-,
并在默认(即无参数)构造函数中使用它。或者,您可以编写一个。为什么不在类构造函数中设置变量值?@statelementdev我正在创建一些自动注入组件的东西,类似于
javax.inject
javax.ws.rs.core.Context
public class Container {
    private static final Container instance = new Container();
    private final HashMap< String, Object> intances = new HashMap<>();

    private Container() { }

    public static Container getInstance() {
        return instance;
    }

    public void register( Class<?> contract, Class<?> contractImpl ) throws InstantiationException, IllegalAccessException {
        this.intances.put( contract.getName(), contractImpl.newInstance() );
    }

    @SuppressWarnings("unchecked")
    public <T> T get( Class<T> interfac ) {
        return ( T ) this.intances.get( interfac.getName() );
    }

    public static <T> T load( Class<T> interfac ) {
        return ( T ) instance.get( interfac );
    }

}
class Test {
    private IClienteAlteracaoObserver observer = Container.load(IClienteAlteracaoObserver.class);
}
class Test {
    private @Inject IClienteAlteracaoObserver observer;
}
public Class Test {
    public static final String DEFAULT_FIELD_VALUE = "example";
    private String field; // to ensure encapsulation, all attributes should be private

    public Test() {
        this(DEFAULT_FIELD_VALUE);
    }

    public Test(String field) {
        this.field = field;
    }

    public String getField() {
        return this.field;
    }

    public static void main(String... args) {
        System.out.println(new Test().getField().equals("example"));
    }
}