簡體   English   中英

Java 類型和名稱

[英]Java types and names

我有一個編程語言課程的家庭作業 這個特殊的練習是關於名稱、可命名、隱藏、重載和多態重載。

我得到了一個令人困惑但有效的 Java 程序(如下所示),我需要做的是對程序中每次出現的Oompa_Loompa ,對其詞法角色(變量名、類名、方法名等)進行分類。 我在這些事件中遇到了特別的麻煩:

  • 標記為/*A*/的行中的那些
  • Oompa_Loompa在標記為/*D*/的行中接近new
  • Oompa_Loompa在標記為/*B*/的行中接近super
  • Oompa_Loompa附近的三元? 在標記為/*C*/

這是代碼:

class Oompa_Loompa {
  Oompa_Loompa Oompa_Loompa; /*A*/
  <Oompa_Loompa> Oompa_Loompa() {}
  Oompa_Loompa(final Oompa_Loompa... Oompa_Loompa) {
    this(Oompa_Loompa, Oompa_Loompa);
  }
  Oompa_Loompa(final Oompa_Loompa[]... Oompa_Loompa) {
    this();
  }
  Oompa_Loompa Oompa_Loompa(final Oompa_Loompa Oompa_Loompa) {
    Oompa_Loompa: for (;;)
    for (;;)
           if (new Oompa_Loompa(Oompa_Loompa) { /*D*/
                @Override Oompa_Loompa Oompa_Loompa(final Oompa_Loompa Oompa_Loompa) {
                         return Oompa_Loompa != null ? /*C*/
                              super.Oompa_Loompa(Oompa_Loompa) /*B*/
                                :  Oompa_Loompa.this.Oompa_Loompa(Oompa_Loompa);
               }
            }.Oompa_Loompa(Oompa_Loompa) != null)
                break Oompa_Loompa;
             else
               continue Oompa_Loompa;
    return Oompa_Loompa;
  }
}

這個: super.Oompa_Loompa(Oompa_Loompa)是一個間接遞歸的方法調用。

你通過Oompa_Loompa類型的變量Oompa_Loompa的覆蓋Oompa_Loompa方法得到了作為一個參數,給封閉Oompa_Loompa方法。

這是一個更理智的版本:

class Klass {

    Klass field;

    <Type_Parameter> Klass() { }

    Klass(final Klass... param) {
        this(param, param);
    }

    Klass(final Klass[]... param) {
        this();
    }

    Klass method(final Klass param) {  // <------------------------\
        outer_loop:                                         //     |
        for (;;) {                                          //     |
            for (;;) {                                      //     |
                if (new Klass(param) {                      //     |
                    @Override                               //     |
                    Klass method(final Klass inner_param) { //     |
                        return inner_param != null          //     |
                             ? super.method(inner_param) // -------/
                             : Klass.this.method(inner_param);
                    }
                }.method(param) != null)
                    break outer_loop;
                else
                    continue outer_loop;
            }
        }
        return param;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM