Java中的静态方法和接口

时间:2015-12-26 13:29:31

标签: java static-methods

我有一个实现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类中的方法签名。

我该怎么做?

3 个答案:

答案 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 questionthe 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