2013-06-22 191 views
-2

我是java新手,想了解下面的代碼片。瞭解一些概念

public class Foo extends Bar<Type, Type2> { 

    @Override 
    public SomeFoo<Type, Type2> getReader(Type type) throws IOException { 
    return new SomeInstance(type); 
    } 
} 

我想了解什麼是public SomeFoo

它不是一個類?它是一個構造函數嗎?它爲什麼會返回一些東西?

當我將盡

Foo foobar = new Foo() 

會有什麼foobar

什麼是Bar<Type,type2>?爲什麼我們使用這些箭頭括號?

+2

嗯。開始[這裏](http://docs.oracle.com/javase/tutorial/java/generics/)。 –

+1

我認爲OP需要比泛型更早開始。 [Here probably](http://docs.oracle.com/javase/tutorial/java/concepts/index.html) –

+0

@BoristheSpider:我看到泛型回答了第二個查詢,但公共SomeFoo是什麼? – Fraz

回答

1

public SomeFoo<Type, Type2> getReader(Type type)是來自Bar類的繼承方法。我們知道它是從Bar繼承的,因爲在類定義中使用了extends

Foo foobar = new Foo()創建Foo對象,foobar是引用該對象的方法。

括號<>表示Java中被稱爲泛型的東西。

進入泛型的細節以及它們的運作方式超出了本主題的範圍。我建議,像其他人一樣,在這裏http://docs.oracle.com/javase/tutorial/java/generics/why.html

+1

這隻回答了一半的問題;並不是那麼好。 –

+0

@BoristheSpider我不是java的專家,只是試圖根據我所知道的給予幫助。感謝侮辱,壽。 –

2

SomeFoo <類型上他們讀了起來,2型>是一種類型。這個特別的人使用Java泛型,下面是一些關於它的更多信息:http://docs.oracle.com/javase/tutorial/java/generics/index.html

酒吧<類型,Type2 >是一個類型,這裏是類Foo的基類。箭頭括號用於使類通用以備用重複。認爲它就像你有布爾值列表。這個列表將如何與列表整數值不同?這裏只條目類型是不同的,所以編程語言使我們能夠從抽象的:

List<Boolean> booleans = ...; 
List<Integer> integers = ...; 

見Javadoc和/或來源的類的java.util.List更多地瞭解這一點。

1

從定義,我們知道我們有兩個通用類:

酒吧:

public class Bar<T, V> {...} 

和SomeFoo:

public class SomeFoo<T, V> {...} 

美孚代表的一類,其不再是通用的。換句話說,T和V已經被固定爲Type和Type2。所以如果你想創造一個Foo,你可以使用新的Foo()而不是新的Foo。

SomeFoo是泛型的另一個對象,在Foo中它也應該被固定爲Type和Type2。所以SomeFoo是公共方法getReader(Type type)的返回類型。