gpt4 book ai didi

Java 通用观察者

转载 作者:行者123 更新时间:2023-12-01 13:34:22 24 4
gpt4 key购买 nike

我有 2 个对象:ProtocolServer。第一个是用不同的对象通知Server,并且Server应该根据对象的类型执行操作。所以,对我来说完美的选择是:

// Server.java
public Server implements IObserver {
public void onAction(ActionObjectOne o) {
//do magic
}
public void onAction(ActionObjectTwo o) {
//do magic
}
....
}

// Protocol.java
public Protocol extends AObservable {
// ....
notifyObservers(ActionObjectOne one);
// ...
}

所以我决定这是观察者模式的工作。

public interface IObserver {
<T extends IAction> void onAction(T action);
}

public class Server implements IObserver {
@Override
public <AuthAction> void onAction(AuthAction action) {
// HERE IS A PROBLEM
}
}

public class AuthAction extends Action; // Action implements IAction - a flag-interface

服务器中出现错误:

  • Server 类型的 onAction(AuthAction) 方法必须重写或实现父类(super class)型方法
  • 类型参数 AuthAction 隐藏了 AuthAction 类型

那么,如何实现我的“完美选择”=)?

最佳答案

采用以下语法

public <AuthAction> void onAction(AuthAction action) {

表达式AuthAction是类型变量,而不是类型参数。上面的代码相当于

public <T> void onAction(T action) {

因此,您可以看到您的 Server 类如何没有实现 IObserver 的方法。相反,我会将 IObserver 设为通用接口(interface)并像这样实现它

public interface IObserver<T extends IAction> {
void onAction(T action);
}

class Server implements IObserver<AuthAction> {
@Override
public void onAction(AuthAction action) {
}

}

关于Java 通用观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21389464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com