热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在JavaHashMap中限制get方法的对象类型

如何解决《在JavaHashMap中限制get方法的对象类型》经验,为你挑选了1个好方法。

我已经像这样实例化了我的HashMap:

Map myHashMap = new HashMap();

的数据类型Key为String,因此当我尝试在地图中插入新的键值对并保持KeyInteger时,它将引发错误。

myHashMap.put(1L, "value");

这意味着在put方法中,他们已经限制了的数据类型Key。但是,当使用get方法从映射中获取值时,它并不会检查的数据类型Key。因此,如果我写这样的东西,它不会给出编译错误。

myHashMap.get(1L);

get在Java Map界面中检查了该方法,其参数类型为Object,因此这就是为什么它允许将任何Object用作put方法参数的原因。

V get(Object key)

有什么方法可以限制在get方法中作为参数传递的数据类型?

我传递的参数应具有与Key实例化哈希映射时使用的数据类型相同的数据类型。



1> Fullstack Gu..:

这样设计是因为在get操作过程中,仅equalsand hashCode用于确定要返回的对象。该get方法的实现不检查用作键的Object的类型。

在您的示例中,您尝试通过传递long来获取值myHashMap.get(1L);,首先,将使用Long具有该值的对象的哈希码1L来确定要从中查找的存储桶。接下来,使用equals的方法来查找要从中返回值的映射的确切条目。在定义明确的equals方法中,始终要检查类型:

public boolean equals(Object obj) {
    if (obj instanceof Long) { //here type is checked
        return value == ((Long)obj).longValue();
    }
    return false;
}

因此,如果类型不相等,则该equals方法将返回false,因此get也将返回null

在某些情况下(例如,List用作键时),可能会发生这样的情况:您使用say的实例在地图上放置了一个项目,ArrayList但是您可以使用的实例成功检索相同的值LinkedList。由于两者都实现了List接口。

Map, String> myHashMap = new HashMap<>();
List arrayList = new ArrayList<>();
List linkedList = new LinkedList<>();
myHashMap.put(arrayList, "foo");
System.out.println(myHashMap.get(linkedList));

上面的代码将在控制台中输出foo

尽管实现不同,但是如果您检查的equals方法ArrayList,则仅检查类型是否为List

public boolean equals(Object o) {
        if (o == this) {
            return true;
        }

        if (!(o instanceof List)) { //checking type of super interface
            return false;
        }
        ...
}

的情况也是如此LinkedList


这是一个很好的示例,说明了如何在StackOverflow中编写答案-格式正确,内容丰富,并带有针对性的代码示例。做得好!
推荐阅读
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 标题: ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
author-avatar
mobiledu2502870747
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有