【发布时间】:2019-12-18 14:17:31
【问题描述】:
我正在尝试实现一个Map<String, Interface>,其中有问题的接口接收并返回一个通用值,以便映射中的不同函数可以具有不同的返回类型,但仍使用相同的接口。我不太确定它是如何工作的,但目标是按照以下这些思路实现目标。
// A generic interface of some kind
public interface Action {
Object doAction(Object object);
}
// The class which implements the map
public class MyClass {
public void example() {
HashMap<String, Action> map = new HashMap<>();
// this takes in a boolean and returns the opposing value
map.put("functionOne", (boolean bool) -> !bool);
// this takes in an integer, increments it and returns it.
map.put("functionTwo", (int integer) -> integer++);
...
}
}
显然这个伪代码是不正确的,我可能会偏离轨道,但我希望它能让您了解我想要实现的目标。任何帮助将不胜感激。
【问题讨论】:
-
你不能这样做,至少不能像这样。如果你想要类似的东西,你将需要跳过更多的环节,例如,键包含
Action的类型,然后你需要做更多的事情来确保类型安全。 -
例如,How to create a generic typesafe HashMap by class type? 之类的东西,但是您的密钥将是一个包含
Class以获取类型信息的对象,我想您将不得不依赖不安全的强制转换来制作东西工作。 -
马克是对的;可以创建地图,但在使用时必须知道所有内容,因为键入了 java。没有原始类型,在调用站点提供正确的参数并转换结果。和更多。事实上,这样的地图对于异类调度没有用..
-
有没有一种方法可以在没有界面的情况下工作?例如,有一个
类型的映射(不太确定正确的类型是什么,因为 Runnable 仅适用于 void 对吗?)。这样,地图只是存储以函数为键的字符串。 -
@saxophonix 函数,Callable(标准接口)接受泛型类型的参数或返回值,因此它们是泛型接口。因此,在创建地图的情况下,无法回避类型安全问题。由于 Runnable 不带参数,因此它也不是您要寻找的。span>
标签: java dictionary generics interface