Java 为嵌套类编写toString方法
我试图为一个内部有一个类的类编写一个toString()方法,但我遇到了一些问题。我曾考虑在每个数组中循环,但没有正确地执行。任何建议都很好Java 为嵌套类编写toString方法,java,tostring,Java,Tostring,我试图为一个内部有一个类的类编写一个toString()方法,但我遇到了一些问题。我曾考虑在每个数组中循环,但没有正确地执行。任何建议都很好 public class MarketDataListLevel2 { public static class BidAskList { protected MarketData Bid; protected MarketData Ask; private BidAskList(@JsonProp
public class MarketDataListLevel2 {
public static class BidAskList {
protected MarketData Bid;
protected MarketData Ask;
private BidAskList(@JsonProperty("Bid") MarketData Bid, @JsonProperty("Ask") MarketData Ask) {
this.Bid = Bid;
this.Ask = Ask;
}
}
protected BidAskList[] BidAskList;
public MarketDataListLevel2(@JsonProperty("Top10BidAsks") BidAskList[] BidAskList) {
this.BidAskList = BidAskList;
}
public String toString() {
// Will make an edit to this later
}
}
MarketData本质上是一个包含4个字段的对象
编辑:
这是我想要输出的数据类型:
{“Top10BidAsks”:[
{“出价”:{“价格”:10.0,“大小”:2.0,“交换ID”:“智能”,“时间戳”:0},
“询问”:{“价格”:12.0,“大小”:2.0,“交换ID”:“智能”,“时间戳”:0},
{“出价”:{“价格”:0.0,“大小”:0.0,“交换ID”:“智能”,“时间戳”:0},
“询问”:{“价格”:13.0,“大小”:12.0,“交换ID”:“智能”,“时间戳”:0}]
}
正如您所看到的,{“Price”:10.0,“Size”:2.0,“ExchangeID”:“SMART”,“timeStamp”:0}实际上是从我的MarketData类构造的4个字段
bid和ask本质上是一个对象(由两个Marketdata对象组成的内部类)。最后,整个对象是MarketDataListLevel2类
基本上,我希望我的toString方法能够输出数据,这涉及所有3个类 你可能想得太多了 根据定义,内部类是由类单独访问的东西,因此在大多数情况下,即使知道正在使用内部类,也不需要任何外部类。因此,正如前面提到的其他方法一样,您不需要为内部类实现toString方法
但是如果你真的想传递这些信息,你可以把它设置成一个扩展类,反过来。。。您可以在内部类中实现toString,然后在外部类的toString中引用该innerClass.toString()。您可能对这个问题想得太多了 根据定义,内部类是由类单独访问的东西,因此在大多数情况下,即使知道正在使用内部类,也不需要任何外部类。因此,正如前面提到的其他方法一样,您不需要为内部类实现toString方法 但是如果你真的想传递这些信息,你可以把它设置成一个扩展类,反过来。。。您可以在内部类中实现toString,然后在外部类的toString中引用该innerClass.toString()
public String toString() {
// Not finished
return "\nMarketDataDepth:"
+ Arrays.toString(BidAskList.Ask)
+ "\n";
}
这甚至不应该编译BidAskList的Ask
字段是非静态的
。再次声明:
protected BidAskList[] BidAskList;
混淆语句BidAskList.Ask
。编译器将以数组形式读取BidAskList
,因此将给出错误:无法在代码中找到symbol:symbol变量Ask
:
public String toString() {
// Not finished
return "\nMarketDataDepth:"
+ Arrays.toString(BidAskList.Ask)
+ "\n";
}
这甚至不应该编译BidAskList的Ask
字段是非静态的
。再次声明:
protected BidAskList[] BidAskList;
混淆语句BidAskList.Ask
。编译器将把BidAskList
作为数组读取,因此会给出错误:找不到符号:符号变量Ask
我建议您将内部类BidAskList重命名为BidAsk。它不是一个真正的列表,只是包含两个字段:出价和出价。(重命名可能有助于消除您的一些困惑。)
我还建议您将MarketData类型更改为double(或float,取决于您的数据)
您还应该将字段(如“出价”和“询问”)命名为以小写字母开头
下面有两个toString()方法。内部类中的一个将BidAsk打印为[45.45 x 45.47]
。另一个在外部类中,使用foreach循环打印每个bitask
public class MarketDataListLevel2 {
public class BidAsk {
protected double bid;
protected double ask;
private BidAsk(double bid, double ask) {
this.bid = bid;
this.ask = ask;
}
public String toString() { return "[" + bid + " x " + ask + "]"; }
}
protected BidAsk[] bidAskList;
public MarketDataListLevel2(BidAsk[] bidAskList) {
this.bidAskList = bidAskList;
}
public String toString() {
StringBuilder ans = new StringBuilder();
for (BidAsk bidAsk : bidAskList) {
ans.append(bidAsk.toString());
}
return ans.toString();
}
}
我建议您将内部类BidAskList重命名为bidaskl。它不是一个真正的列表,只是包含两个字段:出价和出价。(重命名可能有助于消除您的一些困惑。)
我还建议您将MarketData类型更改为double(或float,取决于您的数据)
您还应该将字段(如“出价”和“询问”)命名为以小写字母开头
下面有两个toString()方法。内部类中的一个将BidAsk打印为[45.45 x 45.47]
。另一个在外部类中,使用foreach循环打印每个bitask
public class MarketDataListLevel2 {
public class BidAsk {
protected double bid;
protected double ask;
private BidAsk(double bid, double ask) {
this.bid = bid;
this.ask = ask;
}
public String toString() { return "[" + bid + " x " + ask + "]"; }
}
protected BidAsk[] bidAskList;
public MarketDataListLevel2(BidAsk[] bidAskList) {
this.bidAskList = bidAskList;
}
public String toString() {
StringBuilder ans = new StringBuilder();
for (BidAsk bidAsk : bidAskList) {
ans.append(bidAsk.toString());
}
return ans.toString();
}
}
实际返回的是什么?那么您希望结果是什么?为什么同时有一个名为BidAskList
的字段和类?(为什么要以字段开头?如果遵循正常的Java命名约定,阅读代码会容易得多。)Java中的实例名称不应该以大写字母开头,您可以比“没有正确执行”更具体一些吗?我的意思是,我们非常棒,但我们不能读心。你没有循环任何东西,所以“我在考虑循环每个数组,但我没有正确地做”这句话并不能告诉我们太多。实际返回的是什么?那么你希望结果是什么?为什么同时有一个名为BidAskList
的字段和类?(为什么要以字段开头?如果遵循正常的Java命名约定,阅读代码会容易得多。)Java中的实例名称不应该以大写字母开头,您可以比“没有正确执行”更具体一些吗?我的意思是,我们非常棒,但我们不能读心术。你没有循环任何东西,所以“我在考虑循环每个数组,但我没有正确执行”这句话并不能告诉我们太多。谢谢,这非常有效。非常欢迎你!根据您的编辑,我在MarketData中看到了四个项目(价格、大小、交换和路由)。我建议您将BidTask中的字段从double back更改为MarketData。向打印这四个字段的MarketData类添加一个toString()方法。然后更改BidAsk中的toString(),使其在Bid之前添加“Bid”字符串,在Ask之前添加“Ask”。谢谢,这非常有效。非常欢迎!根据您的编辑,我在