您好我正在尝试编写Java比较,该比较采用名为MovieCard的当前对象,并将其与作为参数传递的另一个MovieCard进行比较。代码
boolean sameName(MovieCard movieCard) {
if(this.MovieCard.equals(movieCard))
return true;
}
错误找不到符号 - 变量MovieCard
如果这有任何区别,那么在MovieCard构造函数之前我的类中会列出该检查。我也是初学者编程课程,所以我们不能使用Comparator,它需要包含它。
答案 0 :(得分:2)
boolean sameName(MovieCard movieCard) {
return this.equals(movieCard);
}
答案 1 :(得分:1)
MovieCard
是一个类,而不是变量。这就是编译器告诉你的内容。
if(this.MovieCard.equals(movieCard))
↑
您可能只需要编写this
。
另请注意,存在一条不会返回任何内容的路径,这不会编译。
你应该这样做:
boolean sameName(MovieCard movieCard) {
return this.equals(movieCard);
}
或
boolean sameName(MovieCard movieCard) {
if(this.equals(movieCard)) {
return true;
}
return false;
}
答案 2 :(得分:1)
如果您的MovieCard
课程中存在此方法,那么只需this
即可。
boolean sameName(MovieCard movieCard) {
if(this.equals(movieCard)) {// this is enough. this.MovieCard is wrong, as there is no variable by that name.
return true;
}
return false; // Since return true is a conditional return, but the method needs to return in any case.
}
您的方法的缩短版本将是
boolean sameName(MovieCard movieCard) {
return this.equals(movieCard); // Returns the result of the comparison.
}
如果查看方法名称sameName()
,看起来您想要比较类中的某个名称字段,而不是这样的对象。
boolean sameName(MovieCard movieCard) {
return this.getName().equals(movieCard.getName()); // Returns the result of the name comparison.
// But there is a possible NPE in the above statement.
}
答案 3 :(得分:1)
使用
boolean sameName(MovieCard movieCard) {
if(this.equals(movieCard))
return true;
}
但似乎你的方法是检查两个对象是否具有相同的名称。如果是这样,那么你可以简单地使用
boolean sameName(MovieCard movieCard) {
if(this.name.equals(movieCard.name))
return true;
}
假设name是成员变量(string)
答案 4 :(得分:1)
你必须写
boolean sameName(MovieCard movieCard) {
if (this.equals(movieCard)){
return true;
} else{
return false;
}
}
因为this.MovieCard
指向Moviecard
类中的变量。
除了语法错误之外,您的equals实现不会执行任何其他默认实现
请记住if (this.equals(movieCard)){
仅当movieCard
和this
指向同一参考时才会这样。
<强>因为,强>
java.lang.Object 提供的equals()
类的默认实现比较内存位置,如果两个引用变量指向相同的内存位置,则只有return
,即基本上它们是同一个对象。
我想您需要覆盖MovieCard
类中的equals方法,以便比较MovieCard's
的字段是否相同。
Prefers to read, How to essentially Ovveride
equals.
您向错误的方向移动,请参阅上面链接中的示例,然后实现equals
以这种方式,如果MovieCard equals
中的所有字段都传递给Object的字段。这将是您要求的实施。
一般来说,an example for comparing two Tiger Object's 等于此等等
@Override
public boolean equals(Object object) {
boolean result = false;
if (object == null || object.getClass() != getClass()) {
result = false;
} else {
Tiger tiger = (Tiger) object;
if (this.color == tiger.getColor() //checking color and pattern same
&& this.stripePattern == tiger.getStripePattern()) {
result = true;
}
}
return result;
}
答案 5 :(得分:0)
上面给出的所有答案都回答了你的问题,所以我也想补充一下。
请记住,调用的
equals
方法属于对象方法。所以你最好覆盖equals
方法以满足你的程序需求。当你覆盖等于时,请确保你也覆盖hashcode
方法..