在java中静态实现对象作用域方法

时间:2012-01-04 21:36:47

标签: java dependency-injection static boilerplate aop

嗨:我有一个定义以下方法的类:

public String abstract getAnimalName(); 

和子类

class Ralph extends Animal
{
    public String getAnimalName(){return "RALPH";}
}

我希望“Ralph”的getAnimalName是静态的,因为只有一个是无状态的 拉尔夫名字的版本。

因此,我想静态地实现getAnimalName,同时仍然满足接口。这可能吗 ?也许,有没有办法可以使用依赖注入或AOP技术通过在运行时代理静态实现来提供对象实现?

显而易见的解决方案(使用对象范围方法包装静态方法)对我的口味来说有点泛滥。

5 个答案:

答案 0 :(得分:4)

不,你的最后一个建议是你所能做的。

这可能是一个警告,设计中有些东西是可疑的。

拉尔夫是一个实例,因此需要遵守getAnimalName的合同。

答案 1 :(得分:2)

你最好这样做:

class Ralph extends Animal { 

    private static final String NAME = "RALPH";

    public String getAnimalName(){return NAME;} 
} 

如果您愿意,也可以公开NAME

答案 2 :(得分:1)

需要对设计进行必要的审核。如果您对架构感到满意,我会将该类转换为单例并使用Ralph.getInstance()。getAnimalName()。

或许可以考虑注释?

@Name("RALPH")
class Ralph extends Animal
{}

您可以从Class对象中提取注释:http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getAnnotations()

答案 3 :(得分:0)

为什么不将代码更改为下一个方式:

class Ralph extends Animal
{
    public static String NAME = "RALPH";
}

class Animal {
    public static String NAME;

}

不仅仅是使用 getAnimalName()方法。

答案 4 :(得分:0)

实际上并不存在多个方法实例的概念。当您创建多个Ralph对象时,它不会添加任何额外的内存。

但是,您可能想要创建元类型。