gpt4 book ai didi

java - Map.Entry 接口(interface)如何在不创建对象的情况下调用 getValue()/getKey() 方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:09:01 25 4
gpt4 key购买 nike

场景如下:

Set<Map.Entry<String,Integer>> st=hashMap.entrySet();
for(Map.Entry<String,Integer> me : set)
{
System.out.println(me.getKey()+":"+me.getValue());
}

现在我的问题是,如果 Set、Map、Entry 都是接口(interface),而 getKey() 和 getValue() 是 Entry 接口(interface)中的方法,Map.Entry 如何在不创建对象的情况下调用它们?

最佳答案

扩展我对答案的 promise :

基本思想是暴露接口(interface)隐藏实现。通常方法返回类型是接口(interface),并从方法的内部返回隐藏的实现。这使此类代码(库)的用户与实现脱钩。实现类可以在不影响用户的情况下改变。

现在你的问题是

Set<String,Integer> st=hashMap.entrySet();

HashMap 源代码有一个内部类实现了Set。 HashMap 中存在方法 entrySet(),它返回实现 Set 的类的对象。签名中的返回类型是 Set 而不是 那个实现类,但返回的是实现 Set 接口(interface)的具体类的对象。

HashMap.java 的作者通过这种方式向您隐藏了实现。他们可以随意更改新版本 Java 中的实现类。只有他们需要注意他们的新实现类实现了 Set 接口(interface)。

它类似于下面的代码。

public interface InterfaceExposed{
public void task();
}

public class A{
private class Implementation implements InterfaceExposed{
public void task(){
// some code to do task as per current implementation.
}
}
public IExposedInterfaceOfA similarToEntrySet(){
return new Implementation();
}
}

现在类 A 的用户将依赖于暴露的接口(interface),并且不知道也不依赖于隐藏的私有(private)实现。

 A a = new A();
IExposedInterfaceOfA xyz = a.similarToEntrySet();
xyz.task();

在这里您看到 xyz 是 IExposedInterfaceOfA 类型,但它指的是具体类实现的对象。

关于java - Map.Entry 接口(interface)如何在不创建对象的情况下调用 getValue()/getKey() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48971958/

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