我正在尝试为其中包含内部类的类编写toString()方法,而我遇到了麻烦。我正在考虑循环遍历每个数组,但我没有正确地做到这一点。任何建议都会很棒。
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”: “SMART”, “时间戳”:0}, “询问”:{ “价格”:12.0, “大小” 为2.0, “交换ID”: “SMART”, “时间戳”:0}}, { “出价”:{ “价格”:0.0, “大小”:0.0 “交换ID”: “SMART”, “时间戳”:0}, “询问”:{ “价格”:13.0, “大小”:12.0, “交换ID”: “SMART”, “时间戳”:0}}] }
正如您可以看到{“Price”:10.0,“大小”:2.0,“ExchangeID”:“SMART”,“timeStamp”:0}基本上是从我的MarketData类构造的4个字段。
bid和ask基本上是一个对象(由两个Marketdata对象组成的内部类)。最后,整个对象是MarketDataListLevel2类。
基本上我希望我的toString方法能够输出数据,这涉及所有这三个类。
答案 0 :(得分:2)
你可能会过度思考这个。
根据定义,内部类是由您的类独自访问的内容,因此在大多数情况下,您甚至不希望任何外部类知道您正在使用内部类。正如上面提到的其他人一样,你不需要 为你的内部类实现一个toString方法。
但是,如果确实希望传递该信息,那么你可以将其设置为类似于反向的扩展类...你将在内部类中实现toString,然后引用该innerClass。外部类的toString中的toString()。
答案 1 :(得分:1)
在您的代码中:
public String toString() {
// Not finished
return "\nMarketDataDepth:"
+ Arrays.toString(BidAskList.Ask)
+ "\n";
}
这甚至不应该编译。 BidAskList's
Ask
字段为non-static
。再次声明:
protected BidAskList[] BidAskList;
混淆了BidAskList.Ask
语句。编译器会将BidAskList
读为数组,因此会出错:can not find symbol : symbol variable Ask
答案 2 :(得分:1)
我建议你将你的内部类BidAskList重命名为BidAsk。它不是一个真正的列表,而只是包含两个Bid和Ask字段。 (重命名可能有助于你的一些困惑。)
我还建议您将MarketData类型更改为double(或float,具体取决于您的数据)。
您还应该将您的字段(例如出价和提问)命名为小写字母。
以下有两个toString()方法。内部类中的那个将BidAsk打印为[45.45 x 45.47]
。另一个在外部类中,使用foreach循环打印出每个BidAsk。
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();
}
}