【发布时间】:2013-08-05 09:51:21
【问题描述】:
我有一个接口,其中使用static final Repsonse = new Response(...) 定义常量。
这些常量被接口中定义的方法使用(或者更确切地说:应该使用)作为返回值。
现在我让 Spring 实例化实现此接口的类,但在运行应用程序时这些常量并未启动(它们是 null)。
这是接口的普遍问题还是 Spring 特有的问题?
也许有更好的方法来实现预期的功能?
对于那些需要 mroe 信息的人:
该接口定义了一个“检查器”,它定义了几种不同的方法来检查对象的状态。这些方法中的每一个都应返回一个标准化的Response 对象,该对象是一个简单的容器,其中包含有关该方法正在检查的对象状态的标准化信息。
我认为将所有可能的响应代码定义为常量是一个好主意,这样使用该接口的实现者就可以将它们放在手边。也许我错了?
这里有一些代码sn-ps:
public interface Validator
{
static final Response VALID = new Response(some params);
/** is expected to return the Response VALID */
Response validate(String param1, String param2);
}
public class ValidatorImpl implements Validator
{
public Response validate(String param1, String param2)
{
//VALID is null; also tried explicit static access here, no luck either
return VALID;
}
}
【问题讨论】:
-
它应该可以工作。能否请您发布一些原始的 sn-ps,也许有人在其中发现了一个错误。
-
我刚刚尝试了一个独立的程序,它运行良好。事实上,spring 推荐基于接口的方法。它应该工作。静态变量是在类加载时初始化的。
-
感谢您试用!您鼓励我使用显式构造方法编写一个小测试,而不是使用 Spring 进行注入,并且确实以这种方式工作。所以我猜其他地方有错误,我会看看我的 Spring 集成。
-
@m00hk00h:您在评论中写道“......使用显式构造函数方法而不是使用 Spring 注入,并且确实以这种方式工作。” ---您的意思是,您发布的问题和代码不是使用的一种用途;而是使用
@Inject或@Autowired作为接口中的静态变量? -
@Ralph 不,我的意思是我用 new() 调用了 Validator 类,而不是使用 Spring 将类注入到变量中。不过,我刚刚发现了错误:我在用于处理该类的单例实例的“getInstance()”方法中犯了一个错误,它现在按预期工作。如果没有您的帮助,就不会查看该代码。非常感谢!
标签: java spring interface constants