1. 程式人生 > >《Java程式設計思想》10.6 匿名內部類奇怪的程式碼

《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介面就可以解決問題:

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());
	}
}
如上面程式碼,我提供了介面Contents,現在這個例子可以順利編譯並運行了。

相關推薦

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