我有一个实现UserEntity
接口的IUserEntity
类。
在UserEntity
课程中,我有一张静态地图:
private static Map<IUserEntity.IIdentifiable, IUserEntity> staticUserEntityMap = new HashMap<>();
在IUserEntity
界面中,我想编写一个类似的方法:
public Collection<IUserEntity> getUsers();
在课堂上:
public static Collection<IUserEntity> getUsers(){
return staticUserEntityMap.values();
}
但我无法在界面中声明静态方法,我无法更改UserEntity
类中的方法签名。
我该怎么做?
答案 0 :(得分:3)
在Java 8中,您可以在界面中使用默认实现,但我相信这不会解决您的问题。您可以创建一个单独的静态方法,而不是更改方法签名,并使用getUsers实现中的类名称来调用它。 e.g。
创建新方法:
public static Collection<IUserEntity> getUsersStatic() {
return staticUserEntityMap.values();
}
从getUsers
:
public Collection<IUserEntity> getUsers() {
return UserEntity.getUsersStatic();
}
答案 1 :(得分:2)
我会推荐您this question和the docs:
除了默认方法,您还可以在中定义静态方法 接口。 (静态方法是一种与之相关的方法 定义它而不是任何对象的类。一切 该类的实例共享其静态方法。)这使它更容易 为您组织库中的辅助方法;你可以保持 相反,特定于接口的静态方法 而不是在一个单独的类。
然而,您也可以在界面中实现该字段,因为这将允许您实现简单的静态方法。下行将是地图将公开。它看起来像这样:
public interface IUserEntity {
// ...
static Map<IUserEntity.IIdentifiable, IUserEntity> staticUserEntityMap = new HashMap<>();
static Collection<IUserEntity> getUsers(){
return staticUserEntityMap.values();
}
}
答案 2 :(得分:0)
您可以创建抽象的SkeletonUserEntity(或AbstractUserEntity)类,您可以在其中定义此getUser方法和所有其他常规方法。所有类都必须实现从SkeletonUserEntity扩展的IUserEntity