我看到了,看上去有點像這個 -Java:什麼是 - public static <T> foo(){...}?
public static<T> foo() {...}
我知道什麼是仿製藥,但有人可以解釋在這方面的Java函數?誰決定什麼T等於?這裏發生了什麼?
編輯:有人可以請給我看一個這樣的功能的例子。
我看到了,看上去有點像這個 -Java:什麼是 - public static <T> foo(){...}?
public static<T> foo() {...}
我知道什麼是仿製藥,但有人可以解釋在這方面的Java函數?誰決定什麼T等於?這裏發生了什麼?
編輯:有人可以請給我看一個這樣的功能的例子。
您錯過了退貨類型,但除此之外它是一種通用方法。與泛型類型一樣,T
代表任何引用類型(如果給定,則在範圍內)。
對於方法,通用參數通常由編譯器推斷。在某些情況下,你可能希望自己指定的通用參數,使用稍微特殊的語法:
List<String> strings = Collections.<String>emptyList();
在這種情況下,編譯器可能推斷出的類型,但它並不總是顯而易見是否編譯器可以或可以」噸。請注意,<>
在點之後。出於語法原因,必須始終指定類型名稱或目標對象。
有可能有通用的構造函數,但我從來沒有見過一個在野外,語法變得更糟。
我相信C++和C#語法將泛型類型放在方法/函數名稱後面。
唉!我的眼睛!它燃燒! – skaffman 2009-07-07 15:55:08
你搖滾。看哪,真正的java大師! /向下彎曲/:D – jrharshath 2009-07-07 15:55:33
這是一個正式的類型參數,它將被在實例化對象時使用的實際類型 參數取代。
例如,這裏是在java.util包中的列表和Iterator definitios:
public interface List<E>{
void add(E x);
Iterator<E> iterator();
}
public interface Iterator<E>{
E next();
boolean hasNext();
}
然後你就可以實例化一個列表是這樣的:
List<String> ls = new ArrayList<String>()
下,您可能想象名單看臺對於其中E具有 已被字符串統一替換的版本:
public interface StringList{
void add(String x)
Iterator<String> iterator();
}
上下文是一種通用的方法,而不是類。變量<T>
僅適用於該方法的調用。Collections類具有多個這些;類本身不是通用的,但許多方法是。
編譯器決定什麼T等於 - 它等於什麼類型的工作。有時候這比其他人更容易。
例如,static <T> Set<T> Collections.singleton(T o)
類型在所述參數中定義的方法:
Collections.singleton(String T)
將返回一個Set<String>
。
有時這種類型很難定義。例如,有時候不容易輸入信息來輸入Collection.emptyList()
。在這種情況下,您可以直接指定類型:Collection.<String>emptyList()
。
你的意思是:public static int binarySearch(List <?extends Comparable super T>> list,T key)in Collections?它只是一個泛型類型,在這種情況下,如果你的鍵是一個字符串,那麼你的List必須是實現Comparable的元素,它可以比較字符串。沒有什麼可以決定T是什麼,它只是編譯時間檢查。 –
JeeBee
2009-07-07 15:54:08
是的,這就是我的意思。 – quilby 2009-07-29 14:00:34