问题标签 [equals]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java 反射等于问题
这是那些日子之一,有人可以帮我解决这个问题。
我有 2 个库存对象,我想在运行时比较它们的属性。一个实例是缓存实例,另一个是刚刚交付到我的系统的新库存实例,它可能等于也可能不等于缓存实例。见下文,其中 m 是 Stock 类的方法,stock 是 Stock 的实例
编辑:对于那些询问我为什么使用反射的人,我正在使用反向 ajax 框架 DWR,并且我正在尝试将 html id 属性映射到我的对象属性,从而允许我使用它们关联的 HTML id 值来注释我的属性。将对象推送到 UI 时,此方法将允许我仅推送已更改的属性,而不是整个对象。
c# - C# 如何为违反 Equals 合约的类选择 Hashcode?
由于某些原因,我有多个课程不遵守官方Equals
合同。在被覆盖的情况下,GetHashCode()
这些类只返回 0,因此它们可以在 Hashmap 中使用。
其中一些类实现了相同的接口,并且有使用该接口作为键的 Hashmaps。所以我认为每个类至少应该在GetHashCode()
.
问题是如何选择这个值。我应该简单地让第一个类返回 1,下一个类返回 2,依此类推吗?或者我应该尝试类似的东西
所以哈希分布更均匀?(我必须自己缓存返回的值还是微软的编译器能够对此进行优化?)
更新:不可能为每个对象返回单独的哈希码,因为 Equals 违反了合同。具体来说,我指的是这个问题。
java - 为什么我的方法会抛出 NoSuchMethodError?
我已经成功实现了reflectionEquals 方法,其中包含一个排除字段的列表。
但是,我最近在 Java 1.5 上编译了我的程序,现在当程序遇到上述行时出现以下错误:
java.lang.NoSuchMethodError: org.apache.commons.lang.builder.EqualsBuilder.= reflectEquals(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/String;)Z
如果有人了解为什么该方法在运行时不存在,我将不胜感激
c# - 为可变对象覆盖 GetHashCode?
我已经阅读了大约 10 个关于何时以及如何覆盖的不同问题,GetHashCode
但仍有一些我不太明白的问题。的大多数实现GetHashCode
都是基于对象字段的哈希码,但有人指出,GetHashCode
在对象的生命周期内,值永远不会改变。如果它所基于的字段是可变的,那它是如何工作的?另外,如果我确实希望字典查找等基于引用相等而不是我的覆盖Equals
怎么办?
我主要是Equals
为了便于对我的序列化代码进行单元测试而重写,我假设序列化和反序列化(在我的情况下为 XML)会杀死引用相等,所以我想确保它至少通过值相等是正确的。Equals
在这种情况下,这是一种不好的做法吗?基本上在大多数执行代码中,我想要引用相等,我总是使用==
并且我没有覆盖它。我应该只创建一个新方法ValueEquals
或其他东西而不是覆盖Equals
吗?我曾经假设框架总是使用==
而不是Equals
比较事物,所以我认为重写它是安全的,Equals
因为在我看来,它的目的是如果你想要一个不同于==
操作员。从阅读其他几个问题来看,情况似乎并非如此。
编辑:
似乎我的意图不清楚,我的意思是 99% 的时间我想要简单的旧引用相等,默认行为,没有意外。对于非常罕见的情况,我想要值相等,并且我想通过使用.Equals
而不是显式请求值相等==
。
当我这样做时,编译器建议我也覆盖GetHashCode
,这就是这个问题的出现方式。GetHashCode
当应用于可变对象时,似乎存在矛盾的目标,这些目标是:
- 如果
a.Equals(b)
那么a.GetHashCode()
应该== b.GetHashCode()
。 - 的值在
a.GetHashCode()
的生命周期内永远不会改变a
。
当一个可变对象时,这些看起来自然是矛盾的,因为如果对象的状态发生变化,我们期望 的值发生.Equals()
变化,这意味着GetHashCode
应该改变以匹配 的变化.Equals()
,但GetHashCode
不应该改变。
为什么会出现这种矛盾?这些建议是否不适用于可变对象?可能是假设的,但可能值得一提的是,我指的是类而不是结构。
解析度:
我将 JaredPar 标记为已接受,但主要用于评论交互。总结一下我从中学到的是,实现所有目标并避免极端情况下可能出现的古怪行为的唯一方法是仅覆盖Equals
和GetHashCode
基于不可变字段,或实现IEquatable
. 这种似乎减少了覆盖Equals
引用类型的用处,因为据我所见,大多数引用类型通常没有不可变字段,除非它们存储在关系数据库中以用它们的主键来识别它们。
ms-access - 以编程方式搜索基于文本框条目的访问列表框控件的项目
我不知道这是否可能,但我正在尝试编写一个 Access 文本框,该文本框将充当数据库的搜索引擎条目控件。具体来说,我想在表单中添加多个不可见的列表框,并用表格或查询数据填充它们。当最终用户在文本框中输入搜索词并按下搜索时,我想编写一系列“if”语句来指定文本框中的条目是否与其中一个列表框中的值匹配,以执行自定义询问。例如:
if (Me.textbox.text = 列表框中的一个值) then etc ...
问题是到目前为止我看到的每个示例都只通过数字或索引搜索列表框值,例如 listbox.selected(0)。由于文本框采用字符串值,而不是数值,因此代码必须将文本框条目等同于列表框中的项目。我已经能够在搜索文本框中添加一个数字并以这种方式找到列表框项,但这是不切实际的,因为我的最终用户只会知道值。总之,我想知道是否有人知道如何以编程方式在列表框中搜索与文本框中输入的值相等的特定值。
谢谢,
DFM
.net - .NET 类的类似结构的深层 Equals()?
给定两个不包含引用循环的对象,您是否知道一种以“通用”方式(通过反射)测试它们相等性的方法?
我基本上想要与结构等价相同的语义,只在类上。
c# - 分别针对值和引用类型的最完整的 Equals 实现
对于像 Point3 (例如)这样的引用类型(类),这是一个矫枉过正,缺乏:
请为值和引用类型进行调整或发布一个新的,我可以在我的基本类型(值和引用)中使用它,而无需在每次我再次实现它时考虑太多。
编辑:这适用于不可变类型。
java - 整数值比较
我是一个新手 Java 编码器,我刚刚读取了一个整数类的变量,可以在 API 中以三种不同的方式描述。我有以下代码:
这是在一个循环内,只是输出out_table
。
我的目标是弄清楚如何查看 integer 中的值count > 0
。
我意识到这count.compare(0)
是正确的方法吗?或者是count.equals(0)
吗?
我知道count == 0
是不正确的。这是正确的吗?是否有一个值比较运算符count=0
?
c# - equality on the sender of an event
I have an interface for a UI widget, two of which are attributes of a presenter.
The widget has an event that both presenter objects subscribe to, and so there is an event handler in the presenter like so:
The problem is that the ReferenceEquals on the sender fails, even though it is the implemented widget that is the sender - the same implemented widget that was set to the presenter attribute!
Can anyone spot what the problem / fix is?
Cheers, Berryl
I didn't know you could edit nicely. Cool. Here is the event raising code:
Here is the debugger dump of the presenter attribute, sans namespace info:
Here is the debugger dump of the sender:
- Berryl
c# - Equals 方法实现助手 (C#)
每次我写一些数据类时,我通常都会花很多时间来编写 IEquatable 实现。
我写的最后一节课是这样的:
实施 IEquatable 非常麻烦。当然 C#3.0/LINQ 有很大帮助,但是顶点可以移动和/或以相反的顺序移动,这给 Equals 方法增加了很多复杂性。经过多次单元测试和相应的实现,我放弃了,并将我的应用程序改为只接受三角形,而 IEquatable 实现只需要 11 个单元测试就可以完全覆盖。
有什么工具或技术可以帮助实现 Equals 和 GetHashCode?