《Java程式設計思想》10.6 匿名內部類奇怪的程式碼
剛剛看到10.6關於匿名內部類的介紹,裡面的程式碼真叫我頭大,在電腦上竟然編譯不過,IDE裡直接標出錯誤了,拿10.6第一段程式碼來看:
public class Parcel7 { public Contents contents() { return new Contents() { private int i = 11; public int value() { return i; } }; } public static void main(String[] args) { Parcel7 p = new Parcel7(); Contents c = p.contents(); } }
這段程式碼是原書裡原封不動弄過來的,在返回值為Contents的方法contents()中,語句return後面跟的是Contents類的定義,可是在Eclipse裡標出了錯誤,大致意思是Contents不能被作為型別,我以為是IDE的問題,於是用文字編輯器寫下來用命令列編譯,仍舊出錯,下面上圖:
非常奇怪,這一節後面的程式碼似乎也無法編譯過,具體原因尚不清楚,真叫人頭大。
4月22日,我似乎找到了解決的方法,只要在外面提供一個Contents介面就可以解決問題:
如上面程式碼,我提供了介面Contents,現在這個例子可以順利編譯並運行了。interface Contents { int value(); } public class Test { public Contents contents() { return new Contents() { private int i = 11; public int value() { return i; } }; } public static void main(String[] args) { Test p = new Test(); Contents c = p.contents(); System.out.println(c.value()); } }
相關推薦
《Java程式設計思想》10.6 匿名內部類奇怪的程式碼
剛剛看到10.6關於匿名內部類的介紹,裡面的程式碼真叫我頭大,在電腦上竟然編譯不過,IDE裡直接標出錯誤了,拿10.6第一段程式碼來看:public class Parcel7 { public Contents contents() { return new Cont
《java程式設計思想——第十章(內部類)》
內部類 可以將一個類的定義放在另一個類的定義內部,這就是內部類。 10.1 建立內部類 把類的定義置於外圍類的裡面。 /** * 建立內部類 * @author Administrator */ public class Parcel1 { class Co
《Java程式設計思想》讀書筆記——內部類(一)
內部類擁有其外圍所有(即使是私有)屬性的訪問權。 public class Outer { private String s = "hello"; private void add(){ System.out.println(s
java程式設計思想-10內部類
簡單來說,將一個類的定義放在另一個類的定義內部,這就是內部類。內部類是一種非常有用的特性,因為它允許你把一些邏輯相關的類組織在一起,並控制位於內部的類的可視性。 1、建立內部類 把類的定義置於外部類的裡面: public class Parcel{ class Conten
【Java程式設計思想】(6)內部類
1. 建立內部類 更典型的情況是,外部類將有一個方法,該方法返回一個指向內部類的引用。 public class Parcel2 { class Contents { private int i = 11; public int value() { ret
【Java 程式設計】嵌入類,內部類,區域性類,匿名類
文章目錄 1. 嵌入類,內部類 ,外部類 2. 變數的可見性 3. 區域性類 4. 匿名類 5. 避免內部類的序列化 在程式碼中使用嵌入類,能增強程式碼的封裝性和可讀性,讓程式碼更簡潔,有效。 1. 嵌入類
Java程式設計思想(6)
第19章 列舉型別 1 enum的函式,ordinal()返回enum的int值,name()返回enum的值 enum Shrubbery {GROUND,CRAWLING,HANGING} public class TwoTuple{ public static void mai
java提高篇-----詳解匿名內部類
在java提高篇-----詳解內部類中對匿名內部類做了一個簡單的介紹,但是內部類還存在很多其他細節問題,所以就衍生出這篇部落格。在這篇部落格中你可以瞭解到匿名內部類的使用、匿名內部類要注意的事項、如何初始化匿名內部類、匿名內部類使用的形參為何要為final。 一、使用匿名內部類內部類 &nb
java 多執行緒 之匿名內部類實現多執行緒
package 匿名內部類實現多執行緒; public class Demo { public static void main(String[] args) { // 繼承Thread類實現多執行緒 new Thread() {
Java雙括號初始化——匿名內部類
http://blog.csdn.net/congduan/article/details/49804013 2015-11-12 19:58 常用的初始化方式 Java中可以使用括號進行初始化,並且分為靜態程式碼塊和非靜態程式碼塊。如下: public clas
在Java中怎麼定義一個匿名內部類,定義匿名內部類的條件是什麼?
一.匿名內部類: 1.匿名內部類其實就是內部類的簡寫格式。 2.定義匿名內部類的前提:內部類必須是繼承一個抽象類或者實現介面。只要一個類是抽象的或是一個介面,那麼其子類中的方 法都可以使用匿名內部類來實現 3.匿名內部類的格式: new 父類或者介面()
Java學習筆記1:匿名內部類的相關錯誤
class Test1_NoNameInnerClass { public static void main(String[] args) { //如何呼叫PersonDemo中的method方法呢? PersonDemo p=new PersonDemo(); //p.method(new
java程式設計思想 第 6 章 訪問許可權控制
更新類庫時為了讓開發人員知道哪些類是被其它類引用的,不能被修改而引人了訪問許可權控制。 public > protect >(預設) > private 一、包:庫單元 包內包含一組類、它們在單一的名稱空間下被組織到了一起: jav
【Java】《Java程式設計思想》筆記(含練習題答案程式碼)-第二章 一切都是物件
2.1 用引用操縱物件【String】 遙控器(引用)- 電視機(資料)建立String引用,如果向無物件的引用傳送資訊會返回一個執行時錯誤,所以安全的做法是:建立一個引用的同時便進行初始化Stri
【Java程式設計思想】10.內部類
將一個類的定義放在另一個類的定義內部,這就是內部類。 10.1 建立內部類 內部類的名字是巢狀在外部類裡面的 外部類可以有方法,返回一個指向內部類的呼叫。(外部類中可以呼叫內部類) 如果在外部類中,希望能在除了靜態方法之外的任意位置建立某個內部類物件,那麼可以向下面這樣指明物件型別。
《Java程式設計思想》第10章 內部類
書中原始碼:https://github.com/yangxian1229/ThinkingInJava_SourceCode 可以將一個類的定義放在另一個類的定義內部,這就是內部類。 內部類與組合是完全不同的概念。 10.1 建立內部類 把類的定義置於外圍類的裡面。更典型的情況是,
java程式設計思想讀書筆記 第十五章 泛型 (匿名內部類和擦除)
1.匿名內部類 泛型還可以應用於內部類以及匿名內部類。下面的例子使用匿名內部類實現了Generator介面: public class Customer { private static long counter = 1; private f
Java程式設計思想(第4版) 之 15.5 泛型之匿名內部類
15.5 匿名內部類 泛型還可以應用於內部類以及匿名內部類。下面的示例使用匿名內部類實現了Generator介面: Customer和Teller類都只有private的構造器,這可以強制你必須使用Generator物件。Customer有一個generator(
工廠方法模板(java程式設計思想 使用匿名內部類)
package innerclasses; interface Service{ void method1(); void method2(); } interface ServiceFactory{ Service getService(); } class
java程式設計思想 第 10 章 內部類
將一個類的定義放在另一類的定義內部,這就是內部類 一、 建立內部類 把內部類的定義置於外圍類的裡面: //: innerclasses/Parcel1.java // Creating inner classes. public class Pa