導航:首頁 > 編程語言 > java泛型和c膜拜

java泛型和c膜拜

發布時間:2025-08-25 16:43:36

1. java中的泛型和C++中的模板是不是一樣啊,哪位大俠知道,請舉例說明下,多謝。

很不一樣,隨便列舉一些

c++的模板,就如同模板這個詞字面上的意思一樣,屬於字元的替代過程
比如有一個模板函數
template <typename T>
void foo(T t) {
t.bar();
}
那麼這個可以編譯。不過你使用這個函數的時候,T必須是包含bar函數的類

java 則不行
static <T> void foo(T t) {
t.bar();
}
這個是通不過編譯的,因為編譯器只知道T是一種Object,不知道T的具體類型。
你甚至不能寫T t = new T(); 因為在這個方法定義的時候,編譯器也不能保證T是有構造函數的

因為c++的模板做事方式是字元串的替代,所以模板參數是int等基本類型是完全沒有問題的。
java則不允許int等基本類型作為泛型參數。比如ArrayList<int>是不可以的

java 有covariance 和 contravariance
也就是也可以寫一個泛型方法,限定泛型參數是某一個具體的類的子類,比如
static <T> void foo(List<T extends Object> list)
這將能夠接受List<String>作為參數,如果只寫List<Object>,那是不能將List<String>作為參數傳給他的
c++沒有這種機制

2. c#泛型和java泛型的區別

泛型技術在C#和Java之中的使用方式看似相同,但實現上卻有著根本性的分歧,內C#裡面泛型無論在程序容源碼中、編譯後的IL中(Intermediate Language,中間語言,這時候泛型是一個佔位符)或是運行期的CLR中都是切實存在的,List<int>與List<String>就是兩個不同的類型,它們在系統運行期生成,有自己的虛方法表和類型數據,這種實現稱為類型膨脹,基於這種方法實現的泛型被稱為真實泛型。
Java語言中的泛型則不一樣,它只在程序源碼中存在,在編譯後的位元組碼文件中,就已經被替換為原來的原始類型(Raw Type,也稱為裸類型)了,並且在相應的地方插入了強制轉型代碼,因此對於運行期的Java語言來說,ArrayList<int>與ArrayList<String>就是同一個類。所以說泛型技術實際上是Java語言的一顆語法糖,Java語言中的泛型實現方法稱為類型擦除,基於這種方法實現的泛型被稱為偽泛型。

3. java中什麼叫泛型

泛就是廣泛,泛指,型是數據類型. 在java中為了方便多種數據通用一個結構而引入了這個概念.
比如 class A<E> {}, 那麼E就是一個泛型,它可以替換為任意類型.
class A<E> { E obj; }
在使用時, A<String>相當於定義了class A {String obj;}. A<Integer>相當於定義了class A{Integer obj;}
使用比如A<String> astr = new A<String>(); 那麼astr.obj就是一個String

4. JAVA中的泛型用法一種: <T> 返回值用法。

泛型方法:泛型方法的存在與所在的類是否為泛型無關。要定義泛型方法,只需將泛型參數列表置於返回值前,如:public class ExampleA { public void f(T x) { System.out.println(x.getClass().getName()); } public static void main(String[] args) { ExampleA ea = new ExampleA(); ea.f(" "); ea.f(10); ea.f('a'); ea.f(ea); } },輸出結果為:java.lang.String java.lang.Integer java.lang.Character java.lang.Class。

使用泛型方法時,不必指明參數類型,編譯器會自動推斷出具體的類型。泛型方法除了定義上的差異外,在調用上與普通方法無異。

值得注意的是,一個靜態方法無法訪問泛型類的類型參數。因此,若要靜態方法能夠使用泛型能力,必須將其定義為泛型方法。例如:public static <T> void printType(T obj) { System.out.println(obj.getClass().getName()); } public static void main(String[] args) { printType(" "); printType(10); printType('a'); printType(new ExampleA()); },輸出結果為:java.lang.String java.lang.Integer java.lang.Character java.lang.Class。

通過這種方式,靜態方法可以使用泛型,增強其靈活性和類型安全性。泛型方法的使用大大簡化了代碼,減少了類型轉換的需要,提高了代碼的可讀性和可維護性。

在Java中,泛型方法的定義和調用遵循一定的規則。定義泛型方法時,需要在方法簽名中明確指定泛型參數。這些參數可以在方法內部使用,以實現類型安全。泛型方法的調用則更加靈活,編譯器會根據實際傳遞的參數類型推斷出具體的類型。

例如:public static <T> T safeGet(Map<String, T> map, String key) { return map.get(key); },這段代碼定義了一個泛型方法safeGet,它接受一個鍵值對映射和一個鍵,返回與鍵關聯的值。這種方法可以用於任何泛型類型,提高了代碼的通用性。

此外,泛型方法還支持泛型參數的上下文使用,這使得方法可以更靈活地處理不同類型的數據。例如:public static <T extends Comparable<T>> int compare(T a, T b) { return a.compareTo(b); },這段代碼定義了一個比較方法,可以用於任何實現了Comparable介面的類型,提供了類型安全的比較操作。

總之,泛型方法的使用使得Java程序更加靈活、安全和易於維護。通過正確地定義和使用泛型方法,開發者可以顯著提高代碼的質量和可讀性。

閱讀全文

與java泛型和c膜拜相關的資料

熱點內容
車機無網路怎麼下載 瀏覽:891
測試linux配置文件可用 瀏覽:353
js158航班 瀏覽:129
醫療行業怎麼做網站 瀏覽:135
java引用數組 瀏覽:467
c打開文件相對路徑 瀏覽:542
編程裡面ST1是什麼意思 瀏覽:311
win10打不開txt文件 瀏覽:650
如何在手機上練習游戲編程代碼 瀏覽:112
還原系統文件路徑 瀏覽:52
網路貓怎麼連接路由器怎麼設置無線路由器 瀏覽:165
蘋果5s移動能升級網路設置 瀏覽:99
一閃app自拍 瀏覽:56
u盤怎麼保全文件 瀏覽:744
編程和幼師哪個更好 瀏覽:75
gtasacs文件 瀏覽:554
word文件被同名文件覆蓋怎麼恢復 瀏覽:866
nodejs關閉自動重啟 瀏覽:318
ciscowrv210密碼 瀏覽:20
如何用命令打開txt文件 瀏覽:8

友情鏈接