我刚刚在PMD中违反了CompareObjectsWithEquals规则,因为我使用' =='来比较两个对象引用。而不是等于(),但我努力想知道为什么这是一个问题,并且找不到任何理由来解决这个问题。
我很欣赏Object.equals()比较引用,因此具有相同的效果,但我没有使用原始对象,因此我无法保证不会覆盖方法某些点在层次结构的某个地方。
我想做一个参考比较,我想确保这总是一个参考比较。为什么PMD会强迫我调用equals()?
只是我,还是这是一个非常愚蠢的规则?
编辑:
需要明确的是 - 我不是在问==
和equals()
之间的区别(根据What is the difference between == vs equals() in Java?) - 我完全理解这一点。我问为什么当调用者可能合法地希望确保执行参考比较时,PMD会强迫我总是使用equals()
。
答案 0 :(得分:1)
在您的情况下,您知道自己在做什么,并且需要比较引用,以确保规则不适用。你必须使用html2canvas($("#map"), {
useCORS: true,
onrendered: function(canvas) {
var mapsourceUrl = canvas.toDataURL();//here i am getting the error
});
。
但大部分时间,新Java开发人员试图使用==
而不是==
来比较对象的价值时,这是一个错误。
答案 1 :(得分:0)
加入@YMomb:
PMD和那些静态分析工具总是将最终决定留给用户。如果您认为您的设计是正确的,则您有权忽略任何规则。