whi*_*uts 27 java generics cqrs
我有一个Java泛型问题我希望有人可以回答.请考虑以下代码:
public interface Event{}
public class AddressChanged implements Event{}
public class AddressDiscarded implements Event{}
public interface Handles<T extends Event>{
public void handle(T event);
}
Run Code Online (Sandbox Code Playgroud)
我想像这样实现这个Handles接口:
public class AddressHandler implements Handles<AddressChanged>, Handles<AddressDiscarded>{
public void handle(AddressChanged e){}
public void handle(AddressDiscarded e){}
}
Run Code Online (Sandbox Code Playgroud)
但java不允许使用Generic两次实现Handles.我能够用C#实现这一点,但是如果不使用Reflection或instanceof和cast,就无法在java中找到解决方法.
在Java中有没有办法使用两个通用接口实现Handles接口?或者也许是另一种编写Handles接口的方法,以便完成最终结果?
Sta*_*lin 19
追求@Amir Raminfar,您可以使用访客模式
interface Event{
void accept(Visitor v);
}
interface Visitor {
void visitAddressChanged(AddressChanged a);
void visitAddressDiscarded(AddressDiscarded a);
}
class AddressChanged implements Event{
@Override
public void accept(Visitor v) {
v.visitAddressChanged(this);
}
}
class AddressDiscarded implements Event{
@Override
public void accept(Visitor v) {
v.visitAddressDiscarded(this);
}
}
class AddressHandler implements Visitor {
void handle(Event e){
e.accept(this);
}
public void visitAddressChanged(AddressChanged e){}
public void visitAddressDiscarded(AddressDiscarded e){}
}
Run Code Online (Sandbox Code Playgroud)
Ami*_*far 10
你不能用Java做到这一点.您只能实现相同通用接口的一个具体实现.我会这样做:
public class AddressHandler implements Handles<Event>{
public void handle(Event e){
if(e instanceof AddressDiscarded){
handleDiscarded(e);
} else if(e instanceof AddressChanged){
handleChanged(e);
}
}
public void handleDiscarded(AddressDiscarded e){}
public void handleChanged(AddressChanged e){}
}
Run Code Online (Sandbox Code Playgroud)