gpt4 book ai didi

Java:如何强制类类型参数与泛型方法中指定的泛型类型相同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:39 25 4
gpt4 key购买 nike

我创建了一个 NotificationManager 类,它让您可以为一些通用通知服务注册一个通用监听器。在 NotificationManager 类中,我有一个用于向服务注册监听器的通用方法:

public static <E> void registerNotify(Class<E> type, INotificationListener<E> listener) {
@SuppressWarnings("unchecked")
INotificationService<E> service = (INotificationService<E>) NotificationServiceFactory.get(type);
service.registerNotificationListener(listener);
}

因此,对于某些特定类型的 INotificationListener,我想强制用户在调用此方法时指定与监听器相同的类型。该类型映射到同一类型的所有 INotificationListeners,但是此方法不强制执行我试图强制执行的内容。例如,我可以调用:

INotificationListener<Location> locationListener = this;
NotificationManager.registerNotify(String.class, locationListener);

代码编译正常。我认为这会强制执行以下内容:

INotificationListener<Location> locationListener = this;
NotificationManager.registerNotify(Location.class, locationListener);

关于如何实现这一点有什么想法吗?


更新:

抱歉弄错了,上面的方法确实有效。同一个类中不起作用的方法实际上如下:

public static <E> void broadcastNotify(Class<E> type, E data)
{
@SuppressWarnings("unchecked")
INotificationService<E> service = (INotificationService<E>) NotificationServiceFactory.get(type);
service.notifyListeners(data);
}

并调用:

Location location = new Location();
NotificationManager.broadcastNotify(Object.class, location);

不会导致编译错误,这是我希望它做的。

最佳答案

我想通了。我更改了以下的签名:

public static <E> void broadcastNotify(Class<E> type, E data)

到:

public static <E> void broadcastNotify(Class<E> type, INotification<E> data)

其中 INotification 是一些接口(interface),它包装了我试图在通知中返回的数据。这强制类类型必须与通知类型完全匹配,以便映射通知的底层映射将消息正确发送到已注册的监听器,而不必担心程序员出错。

关于Java:如何强制类类型参数与泛型方法中指定的泛型类型相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6207083/

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