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"));
}
}