Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在带有泛型的映射中存储和调用方法 我试图学习一些我认为更复杂的java,我对泛型感兴趣,因为我注意到它能做令人惊奇的事情。 我考虑过这样做: 有一个映射,它将存储一个类和某种形式的方法,这将用于给定某个类的情况,比如说String.class,它将在方法中运行代码_Java_Generics - Fatal编程技术网

在带有泛型的映射中存储和调用方法 我试图学习一些我认为更复杂的java,我对泛型感兴趣,因为我注意到它能做令人惊奇的事情。 我考虑过这样做: 有一个映射,它将存储一个类和某种形式的方法,这将用于给定某个类的情况,比如说String.class,它将在方法中运行代码

在带有泛型的映射中存储和调用方法 我试图学习一些我认为更复杂的java,我对泛型感兴趣,因为我注意到它能做令人惊奇的事情。 我考虑过这样做: 有一个映射,它将存储一个类和某种形式的方法,这将用于给定某个类的情况,比如说String.class,它将在方法中运行代码,java,generics,Java,Generics,我看到它正在完成并正在进行一个名为(Aikar命令框架)的项目 它如何注册新方法的示例: registerContext(char.class, c -> { String s = c.popFirstArg(); if (s.length() > 1) { throw new InvalidCommandArgument(MessageKeys.MUST_BE_MAX_LENGTH, "{max}", String.valueOf(1));

我看到它正在完成并正在进行一个名为(Aikar命令框架)的项目

它如何注册新方法的示例:

registerContext(char.class, c -> {
    String s = c.popFirstArg();
    if (s.length() > 1) {
        throw new InvalidCommandArgument(MessageKeys.MUST_BE_MAX_LENGTH, "{max}", String.valueOf(1));
    }
    return s.charAt(0);
});
他的注册方法似乎很简单:

// The map
protected final Map<Class<?>, ContextResolver<?, R>> contextMap = new HashMap<>();
// The register class
public <T> void registerContext(Class<T> context, ContextResolver<T, R> supplier) {
    contextMap.put(context, supplier);
}
//地图

受保护的最终映射在Java 8中,很少有功能接口可以帮助实现这种功能:
函数
供应商
消费者
可运行
(较旧)

Runnable
只是一段要运行的代码,没有输入,也没有输出。您可能以前见过:要创建一个新的
线程
,您需要提供一个
可运行的
,然后新的
线程
调用该代码<代码>供应商
类似,但它返回一个值<代码>使用者接受输入,但不返回任何内容<代码>函数具有输入和输出,在您的示例中使用了类似的功能

因此,基本上,根据需要,您可以创建一个方法映射,其中key是方法的名称,value是可运行的(要运行的代码)-
map

Map methodMap=newhashmap();
methodMap.put(“sayhello”,()->System.out.println(“hello”);
methodMap.put(“说再见”,()->System.out.println(“再见”);
methodMap.get(“说你好”).run();

所有这些都与泛型有一点关系,但是假设您想要存储带有输入和输出的方法,这将成为一个问题。你需要像
map这样的东西。你发布的代码中没有任何东西似乎与反射有关。Java教程有一整章是关于泛型的。如果你想了解他们,你应该读一下@谢谢你,我会交易的。很抱歉,我删除了它的反射,认为它包含在泛型部分。是的,如果可能的话,我希望它有输入和输出。例如,我注册了一个方法,给它一个字符串将返回一个数字,然后给它一个字符串并根据我传递给映射的类从中获取数字。但我将研究函数,因为它似乎是我所需要的!