有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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个字段的对象

编辑:

这就是我想要输出的数据类型:

{“TOP10BidTasks”:[ {“出价”:{“价格”: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个字段

买卖基本上是一个对象(由两个Marketdata对象组成的内部类)。最后,整个对象是MarketDataListLevel2类

基本上,我希望我的toString方法能够输出数据,这涉及到这三个类


共 (3) 个答案

  1. # 1 楼答案

    我建议您将内部类BidAskList重命名为BidAskList。它并不是一个真正的列表,只是包含两个“出价”和“询问”字段。(重新命名可能有助于消除一些困惑。)

    我还建议您将MarketData类型更改为double(或float,取决于您的数据)

    您还应该将字段(如“出价”和“询问”)命名为以小写字母开头

    下面有两个toString()方法。内部类中的一个将BidAsk打印为[45.45 x 45.47]。另一个在外部类中,使用foreach循环打印每个BidTask

    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();
        }
    }
    
  2. # 2 楼答案

    在代码中:

    public String toString() {
            // Not finished
            return "\nMarketDataDepth:"
            + Arrays.toString(BidAskList.Ask)
            + "\n";
        }
    

    这甚至不应该编译BidAskList's{}字段为non-static。再次声明:

    protected BidAskList[] BidAskList;
    

    混淆语句BidAskList.Ask。编译器将BidAskList作为数组读取,因此将给出错误:can not find symbol : symbol variable Ask

  3. # 3 楼答案

    你可能想得太多了

    根据定义,内部类是由类单独访问的东西,因此在大多数情况下,即使知道正在使用内部类,也不需要任何外部类。因此,正如上面提到的其他人一样,您不需要为内部类实现一个toString方法

    但是,如果你真的想传递这些信息,你会把它设置成一个扩展类,反过来。。。您可以在内部类中实现toString,然后引用该内部类。在外部类的toString中使用toString()