如何覆盖正在传递到字符串方法中的 object?
How do I override an object that is being passed into a method to string?
正如标题所说,我试图将一个 object 传递给一个方法,以便我可以比较字符串。 object 没有正确转换,显示为“MediaItem@9a2”,我知道我必须使用覆盖,但我不太确定如何执行此操作。
public class MediaItem {
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public MediaItem(String t)
{
setTitle(t);
}
public MediaItem()
{
}
public boolean equals(Object obj)
{
String temptitle = getTitle();
temptitle = temptitle.toLowerCase();
temptitle = temptitle.trim();
// System.out.println(temptitle);
String tempobj = obj.toString();
System.out.println(tempobj);
tempobj=tempobj.toLowerCase();
tempobj= tempobj.trim();
System.out.println(tempobj);
if (temptitle.equals(tempobj))
{
System.out.println("this");
return true;
}
else{
return false;
}
}
@Override
public String toString()
{
return obj.title;
}
}
代码底部的重写尝试很糟糕。另外,不确定为什么所有颜色都从代码中消失了。
编辑:好的,也许我应该添加更多解释:任务是比较发送的对象和当前 object 的标题。如果它们匹配,我 return 为真。如果不是,我return假的。我唯一可以更改的是 equals(object obj) 方法中的内容。我还可以添加覆盖。就是这样。有比我尝试做的更简单的方法吗?
重写 toString()
方法是当您想为 toString()
而不是通常的对象散列代码进行一些自定义外部序列化时。要使用 equal()
比较 obj,您需要根据需要自定义 equals 方法,例如字段比较、散列比较等。
public String toString()
{
return title;
}
就足够了,您也可以使用 return this.title;
但是 this
是隐含的,因为方法中没有定义其他标题
要获得对象的人类可读表示,您应该覆盖 toString()
方法,这是正确的。但是你应该这样做:
public String toString() {
return title; // No obj!
}
// or like that
public String toString() {
return "MyClass{title=" + title + "}";
}
你做错的是比较对象。这是一个复杂的话题,但有一个简单的例子:
@Override
public boolean equals(Object o) {
return o != null
&& getClass() == o.getClass()
&& Objects.equals(title.toLowerCase().trim(),
o.title.toLowerCase().trim()); // for each field
}
正如标题所说,我试图将一个 object 传递给一个方法,以便我可以比较字符串。 object 没有正确转换,显示为“MediaItem@9a2”,我知道我必须使用覆盖,但我不太确定如何执行此操作。
public class MediaItem {
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public MediaItem(String t)
{
setTitle(t);
}
public MediaItem()
{
}
public boolean equals(Object obj)
{
String temptitle = getTitle();
temptitle = temptitle.toLowerCase();
temptitle = temptitle.trim();
// System.out.println(temptitle);
String tempobj = obj.toString();
System.out.println(tempobj);
tempobj=tempobj.toLowerCase();
tempobj= tempobj.trim();
System.out.println(tempobj);
if (temptitle.equals(tempobj))
{
System.out.println("this");
return true;
}
else{
return false;
}
}
@Override
public String toString()
{
return obj.title;
}
}
代码底部的重写尝试很糟糕。另外,不确定为什么所有颜色都从代码中消失了。
编辑:好的,也许我应该添加更多解释:任务是比较发送的对象和当前 object 的标题。如果它们匹配,我 return 为真。如果不是,我return假的。我唯一可以更改的是 equals(object obj) 方法中的内容。我还可以添加覆盖。就是这样。有比我尝试做的更简单的方法吗?
重写 toString()
方法是当您想为 toString()
而不是通常的对象散列代码进行一些自定义外部序列化时。要使用 equal()
比较 obj,您需要根据需要自定义 equals 方法,例如字段比较、散列比较等。
public String toString()
{
return title;
}
就足够了,您也可以使用 return this.title;
但是 this
是隐含的,因为方法中没有定义其他标题
要获得对象的人类可读表示,您应该覆盖 toString()
方法,这是正确的。但是你应该这样做:
public String toString() {
return title; // No obj!
}
// or like that
public String toString() {
return "MyClass{title=" + title + "}";
}
你做错的是比较对象。这是一个复杂的话题,但有一个简单的例子:
@Override
public boolean equals(Object o) {
return o != null
&& getClass() == o.getClass()
&& Objects.equals(title.toLowerCase().trim(),
o.title.toLowerCase().trim()); // for each field
}