gpt4 book ai didi

java - 键/值对 : call a method key with params , 返回用 params 构造的值

转载 作者:行者123 更新时间:2023-11-30 07:18:41 26 4
gpt4 key购买 nike

想象一下用这种伪语言进行的映射

class Mapping{
key0 --> new ObjectValue()
key1 --> new ObjectValue()
key3 --> new ObjectValue1(String name)
key4 --> new ObjectValue2(String name, int age)
...
}

在此映射中,值由不同的构造函数实例化。当我调用任意键时,我想传递一些参数。

约束: 所有键都从公共(public)类扩展。所有 ObjectValue 都从公共(public)类扩展。

<小时/>

我希望方法调用返回

StaticMapping.key0.get();  //  return new ObjectValue()    
StaticMapping.key1.get(name); // return new ObjectValue1(String name)

如何实现这一目标?这是什么模式?

<小时/>

据我所知数据结构 map enum constructor无法实现这一点。

最佳答案

因为所有键都有不同的接口(interface),最重要的是,具有不同数量的参数,因此您必须为每个键定义一个新类型。

事实上,它们必须有一个共同的父类(super class)型,这也禁止使用 java.util.function 中的接口(interface)作为静态类型。

class KeySuper {...}

class KeyType0 extends KeySuper {
public ObjectValue get() {
return new ObjectValue();
}
}

class KeyType1 extends KeySuper {
public ObjectValue1 get(String str) {
return new ObjectValue1(str);
}
}

// Simmilar for KeyType2

class StaticMapping {
// public static final Supplier<ObjectValue> key0 = ObjectValue::new;
// ^^^ does not have the common super type...

public static final KeyType0 key0 = new KeyType0();
public static final KeyType0 key1 = new KeyType0();
public static final KeyType1 key2 = new KeyType1();
public static final KeyType2 key3 = new KeyType2();
}
<小时/>

还有其他选项,例如接受 Object[],并在运行时检查参数的数量和类型,如果参数不正确则抛出异常,这样您就可以一个:

abstract ObjectValue get(Object...);

在父类(super class)型上定义,这看起来并没有那么有用。

关于java - 键/值对 : call a method key with params , 返回用 params 构造的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37974233/

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