我想强制管理MVC中通信域对象的所有Command对象为其各自的域对象实现setData方法。
所以,让我们说它是:
class User { //this is a domain
Long id
String userName
}
基本命令:
abstract class DomainObjectCommand {
...
abstract setData(Object domain)
...
}
最后,我们将使用的实际命令对象:
class ListUserCommand extends DomainObjectCommand {
Long userId
String userName
public setData( User user ) { //this is not a valid implementation of the abstract method because "Object" is not "User"
...
}
}
是否有优雅的方式来执行此操作?
我希望确保所有命令对象在命令中设置域数据的方式上行为相似,但显然每个命令都有自己必须管理的唯一域对象,因此抽象方法需要允许任何域对象,而不仅仅是用户或角色或其他任何内容。
目前,我只是停止执行"执行"通过实现基本方法并抛出基本异常:
public setData(Object domain) {
throw new NotImplementedException()
}
答案 0 :(得分:1)
这可以通过泛型类型来解决。抽象类定义将使用泛型类型:
abstract class DomainObjectCommand<T> {
...
abstract setData(T domain)
...
}
在实现类中,我们定义实际类型(在本例中为user)。
public class ListUserCommand extends DomainObjectCommand<User> {
Long userId
String userName
public setData( User user ) {
}
}