gpt4 book ai didi

java - java构造函数可以将接口(interface)作为参数吗

转载 作者:行者123 更新时间:2023-11-29 07:43:17 25 4
gpt4 key购买 nike

我正在试验 Java 接口(interface),下面的代码出错了。

在类中,构造函数将 Map 作为参数

public class ClassA{
private Map<String,InterfaceA> testMap;
ClassA(Map<String,InterfaceA> testMap){
this.testMap=testMap;
}
}



public class ClassB{
ClassA testA = new ClassA(new HashMap<String,ImplmntsInterfaceA>); //1st declaration
Map<String,ImplmntsInterfaceA> testMap=new HashMap<String,ImplmntsInterfaceA>(); //Second declaration
ClassA testB = new ClassA(testMap);
}

ImplmntsInterfaceA 是一个实现了 InterfaceA 的类。

ClassA 声明都给出了错误,首先建议将 Map 构造函数更改为 HashMap,然后要求将 InterfaceA 通用替换为 ImplmntsInterfaceA.

有人可以帮忙解决为什么它不起作用吗?

谢谢:)

最佳答案

我怀疑你想改变Map<String,InterfaceA>Map<String, ? extends InterfaceA>ClassA构造函数签名(和字段)。否则一个HashMap<String, ImplmntsInterfaceA>确实不是一个有效的论据。

考虑哪些操作在 Map<String,InterfaceA> 上有效- 你可以这样写:

map.put("foo", new SomeArbitraryImplementationOfA());

这对 Map<String, ImplmntsInterfaceA> 无效因为后者的值必须是 ImplmntsInterfaceA .编译器会保护您免受这种情况的影响。

如果您使用 Map<String, ? extends InterfaceA> ,您将无法在 ClassA 内进行任何写入 操作(因为您不知道哪些值是有效的)但是您将能够从 map 中获取,知道每个值至少实现 InterfaceA .

这基本上是为什么 List<Banana> 的一个更复杂的版本不是 List<Fruit> ...

关于java - java构造函数可以将接口(interface)作为参数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28042996/

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