Java中的静态方法和接口
我有一个Java中的静态方法和接口,java,static-methods,Java,Static Methods,我有一个UserEntity类,它实现了IUserEntity接口 在UserEntity类中,我有一个静态映射: private static Map<IUserEntity.IIdentifiable, IUserEntity> staticUserEntityMap = new HashMap<>(); 在课堂上: public static Collection<IUserEntity> getUsers(){ return staticUs
UserEntity
类,它实现了IUserEntity
接口
在UserEntity
类中,我有一个静态映射:
private static Map<IUserEntity.IIdentifiable, IUserEntity> staticUserEntityMap = new HashMap<>();
在课堂上:
public static Collection<IUserEntity> getUsers(){
return staticUserEntityMap.values();
}
公共静态集合getUsers(){
返回staticUserEntityMap.values();
}
但是我不能在接口中声明静态方法,也不能在UserEntity
类中更改方法签名
如何实现这一点?您可以创建抽象SkeletonUserEntity(或AbstractUserEntity)类,在该类中定义此getUser方法和所有其他通用方法。所有类都必须实现从SkeletonSerentity扩展而来的IUserEntity您可以创建抽象SkeletonSerentity(或AbstractUserEntity)类,您可以在其中定义此getUser方法和所有其他通用方法。所有类都必须实现从SkeletonSerentity扩展而来的IUserEntity。在Java 8中,您可以在接口中使用默认实现,但我相信这不会解决您的问题。您可以创建一个单独的静态方法,并在getUsers实现中使用类名调用它,而不是更改方法签名。e、 g 创建新方法:
public static Collection<IUserEntity> getUsersStatic() {
return staticUserEntityMap.values();
}
在Java8中,您可以在接口中使用默认实现,但我相信这不会解决您的问题。您可以创建一个单独的静态方法,并在getUsers实现中使用类名调用它,而不是更改方法签名。e、 g 创建新方法:
public static Collection<IUserEntity> getUsersStatic() {
return staticUserEntityMap.values();
}
我想请您参考,并且:
除了默认方法外,还可以在中定义静态方法
接口。(静态方法是与
在其中定义而不是使用任何对象的类
类的实例共享其静态方法。)这使它更容易
用于在库中组织帮助器方法;你可以留下
特定于同一接口中的接口的静态方法,而不是
而不是单独上课
但是,您也可以在接口中实现该字段,因为这将允许您实现简单的静态方法。不利的一面是地图将公开。看起来是这样的:
public interface IUserEntity {
// ...
static Map<IUserEntity.IIdentifiable, IUserEntity> staticUserEntityMap = new HashMap<>();
static Collection<IUserEntity> getUsers(){
return staticUserEntityMap.values();
}
}
公共接口IUserEntity{
// ...
静态映射staticUserEntityMap=newHashMap();
静态集合getUsers(){
返回staticUserEntityMap.values();
}
}
我建议您参考,并且:
除了默认方法外,还可以在中定义静态方法
接口。(静态方法是与
在其中定义而不是使用任何对象的类
类的实例共享其静态方法。)这使它更容易
用于在库中组织帮助器方法;你可以留下
特定于同一接口中的接口的静态方法,而不是
而不是单独上课
但是,您也可以在接口中实现该字段,因为这将允许您实现简单的静态方法。不利的一面是地图将公开。看起来是这样的:
public interface IUserEntity {
// ...
static Map<IUserEntity.IIdentifiable, IUserEntity> staticUserEntityMap = new HashMap<>();
static Collection<IUserEntity> getUsers(){
return staticUserEntityMap.values();
}
}
公共接口IUserEntity{
// ...
静态映射staticUserEntityMap=newHashMap();
静态集合getUsers(){
返回staticUserEntityMap.values();
}
}
public Collection getUsers(){return staticUserEntityMap.values();}有什么问题?如果不能更改任何签名,只需编写一个调用静态方法的非静态方法。接口不能有没有方法体的静态方法。就这样。一般来说,接口和静态不能很好地协同工作,这是有道理的。另外,您可能想看看(Java 8允许在接口中使用静态方法)。@Gaël但不是没有实现,对吗?public Collection getUsers(){return staticUserEntityMap.values();}
如果不能更改任何签名,只需编写一个调用静态方法的非静态方法。没有方法体,接口就不能有静态方法。就这样。一般来说,接口和静态不能很好地协同工作,这是有道理的。另外,您可能想看看(Java 8允许在接口中使用静态方法)。@Gaël但不是没有实现,对吗?Huummm,如果我想实现这些,那么我必须对所有CRUD方法都这样做?每个UserEntity对象都可以访问这些“静态”方法,这还不错?Huummm,如果我想实现这些方法,那么我必须对所有CRUD方法都这样做?每个UserEntity对象都可以访问这些“静态”方法,这还不错?好的,谢谢,我认为这是一个更好的结构概念。没有办法让staticMap受保护或私有?好的,谢谢,我认为这是一个更好的结构概念。没有办法让staticMap受保护或私有?