[英]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.