为嵌套类编写toString方法

时间:2013-11-06 19:20:43

标签: java tostring

我正在尝试为其中包含内部类的类编写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方法能够输出数据,这涉及所有这三个类。

3 个答案:

答案 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();
    }
}