gpt4 book ai didi

java - 在 toString 中使用 equals 或 instanceof

转载 作者:行者123 更新时间:2023-12-01 08:09:10 25 4
gpt4 key购买 nike

好吧,我有一个带有“MartianManager”类的程序:*注意代码不完整,仍然有一些缺失的部分,只是提供了完整的代码,以供引用完成后的外观

import java.util.ArrayList;

public class MartianManager {
private ArrayList<Martian> martians;
private ArrayList<Martian> teleporters;

public void addMartian(Martian m) {
martians.add(m);
if(m instanceof GreenMartian)
teleporters.add(m);
}
//public Object clone() {

public Martian getMartianClosestToID(int id) {
}
public void groupSpeak() {
for(Martian m : martians) {
m.speak();
}
}
public void groupTeleport(String dest) {
}
}

和火星级:

public abstract class Martian implements Cloneable {
int id;

public Martian(int id) {
this.id = id;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
public int getId() {
return id;
}
public boolean equals(Object o){
return this.getId() == ((Martian)o).getId();
}
public abstract void speak();

public String toString(){
String str = "";
if (this instanceof GreenMartian) {
str = "Green martian" + id;
}
if (this instanceof RedMartian) {
str = "Red martian" + id;
}
return str;
}
}

它通过 GreenMartian 进行了扩展:

public class GreenMartian extends Martian implements ITeleport{

public GreenMartian(int id) {
super(id);
}
public void speak() {
System.out.println(id + "Grobldy Grock");
}
public void teleport(String dest) {
System.out.println(id + "teleporting to " + dest);
}

}

还通过 RedMartian 进行了扩展:

public class RedMartian extends Martian {

public RedMartian(int id) {
super(id);
}
public void speak() {
System.out.println(id + "Rubldy Rock");
}
}

我实际上有几个问题,但现在我的问题是在 Martian 类的 toString 中。它应该返回一个像这样的字符串:“Red [or Green] martian”+id。我需要确定 Martian 的类型,我开始使用 instanceof 但像这样“Martian 无法解析为变量”。我正在尝试确定这是否是最好的方法,或者 equals() 是否是确定类型的最佳方法?

这也是我第一次使用“克隆”,所以不确定它到底是如何工作的,但有一个想法,是否有一种方法可以确定“克隆”是什么并以这种方式确定它?

感谢您的帮助!

最佳答案

没有

public String toString(){
String str;
if (Martian instanceof GreenMartian) {
}

abstract Martian类中是一个坏主意。您不希望您的父类依赖于其子类。

在每个子类中实现一个 toString() 方法,并让多态性发挥作用

<小时/>

如果你绝对需要

if (Martian instanceof GreenMartian) {  

是错误的。您可以这样使用instanceof

instanceOfClass instanceof SomeClass

在这种情况下,您可以通过 this 关键字获得对 instanceOfClass 的引用,因为您正在实例上调用该方法

this instanceof GreenMartian

关于java - 在 toString 中使用 equals 或 instanceof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18897748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com