導航:首頁 > 研究方法 > 為什麼在靜態方法中不能使用泛型

為什麼在靜態方法中不能使用泛型

發布時間:2022-03-02 22:56:06

Ⅰ 還是關於java泛型的問題:在靜態方法中為什麼不能引用類級別的類型參數

靜態變數和靜態方法是屬於使用泛型參數的基類的,跟泛型無關。
Java目前的泛型還是偽泛型,需要在編譯的時候進行強轉。

Ⅱ static方法無法訪問泛型類的類型參數是什麼意思啊

泛型類是在實例化類的時候指明泛型的具體類型,而泛型方法是在調用方法的時候指明泛型的具體類型 。

Ⅲ 【Java基礎語法】如何在使用靜態方法的時候指定其泛型萬分感謝!

舉個例子:
public void f(int i, char ch, String s){}
這個方法中有三個參數,分別為int類型的i,char類型的ch,String類型的s。這三個參數的類型都已經指定了,如果實際參數類型和對應參數類型不一致,編譯器會出現錯誤。
如何才能做到可以任意指定參數的類型呢?這個時候可以使用泛型方法。舉個例子:
public <A, B, C> void f(A a, B b, C c){}
這個就是所謂的泛型方法,當向方法中傳遞參數後,編譯器會自動推斷出參數的類型,如:
f(1, "hello", 123.123);
第一個參數類型為Integer,第二個為String,第三個為Double(自動包裝機制讓基本類型自動包裝成對應的包裝類)。
泛型方法的特徵就是方法前面有對尖括弧<>,尖括弧裡面的就是類型參數,也就是說類型是個變數,要由實際的參數推斷得來。
Java中的方法就是這樣獲取泛型能力的,還有其他方式。但是static方法比較特殊,如果要使得static方法具有反省能力就必須要使用到上面的方法。
希望能解決你的問題。

Ⅳ 為什麼靜態成員、靜態方法中不能用this和super關鍵字

因為this代表的是調用這個函數的對象的引用,而靜態方法是屬於類的,不屬於對象,靜態方法成功載入後,對象還不一定存在 2. 在問題之前先講super的用法:1.super的用法跟this類似,this代表對本類對象的引用,指向本類已經創建的對象;而super代表對父類對象的引用,指向父類對象;2.靜態優先於對象存在;3.由上面的1.和2.知:因為靜態優先於對象存在,所以方法被靜態修飾之後方法先存在,而方法裡面要用到super指向的父類對象,但是所需的父類引用對象晚於該方法出現,也就是super所指向的對象沒有,當然就會出錯。綜上,靜態方法中不可以出現super關鍵字。 3. 首先你要明白對象和類的區別。 this和super是屬於對象范疇的東西,而靜態方法是屬於類范疇的東西所有的成員方法,都有一個默認的的參數this(即使是無參的方法),只要是成員方法,編譯器就會給你加上this這個參數如:
Class A中 void method1(){}實際上是這樣的--------> void method1(A this)
void method2(int x){}實際上是這樣的--------> void method2(A this, int x)
而靜態方法與對象無關,根本不能把對象的引用傳到方法中,所以不能用this 4. 在一個類中定義一個方法為static,則為靜態方法,那就是說,無需本類的對象即可調用此方法,調用一個靜態方法就是「類名.方法名」

Ⅳ Java泛型類為什麼不能持有靜態泛型變數

這事其實一開始我也不明白,查了很多資料都說是硬性規定:

後來又大神指點了一下,我感覺他說的非常有道理:我把他說的一句話細說成3句你看看.

  1. 靜態成員,會第一時間進入內存的,假如你說的泛型成立,你說此刻它泛型屬於什麼類型?

    明白了不?

  2. 泛型終究還是會被擦除的,只是編譯時候幫助不小,這也就等於在說,泛型是在實例化對象的時候,才確定要給出什麼類型的參數,懂了沒?

  3. 如果按照慣例靜態早就進內存了,泛型早已經確定了不是嗎?

Ⅵ 為什麼靜態方法中不能調用動態方法

java在靜態方法中使用動態方法的方法是new對象出來,然後用.的方式調用方法:
舉例如下:
定義Outer.java:
public class Outer {
private static int size;
public void dostuff() {
size++;
System.out.println("hello,I am called");
}
}
然後在另外的測試類Main中,調用:
public class Main {
public static void main(String[] args) {
Outer outer =new Outer();
outer.dostuff();
}
}

Ⅶ java 靜態方法含有泛型 會在調用的時候重新載入嗎

泛型的實現原理是類型擦除,對於static<T> void foo(T arg)這一個方法來說,不管代碼里的T有多少種類型,運行時JVM中的類型都是Object,這個方法在JVM中實際上是static void foo(Object arg),也就是運行時根本不存在泛型的概念。

Ⅷ java中為什麼在方法上定義受限泛型時改為T會不行 這兩者有什麼區別

?表示一個不確定的類型,? extends Person 就是說已經確定父類是Person類了,然後再滿足?是Person類的子類

T表示這個類已經是一個確定的類型,比如T表示String類、Object類或者其他某個具體的類,然後T extends Person意思就是說這個具體的類要繼承自Person類,這個明顯就有問題,因為一個類繼承自另一個類是在class中定義的,所以這里有矛盾

大概就是這個意思!

Ⅸ java泛型問題:我能理解為什麼類型參數不能用於靜態欄位,但不理解為何在靜態方法中也不能引用類型參數

這個原理是這樣的,靜態方法中所能引用的屬性必須是靜態的,而引用參數是無法聲明為靜態的,因為靜態的屬性必須在聲明時赴值或者實例化,泛型引用變數在聲明的時候根本不知道是什麼類型,自然不可能實例化,當然也不能放進靜態方法了,手機碼字,求支持。不懂加qq詳說

Ⅹ Java中,為什麼靜態方法不能使用類型形參

所為程序,是接順序一句一句的執行。所以,我們來看這段代碼。main方法,程序的入口,擁有a,b兩個局部變數。a,b變數值分別為10,20。下一句調用add靜態方法,add方法有兩個形參a,b,main方法調用add方法時為形參a傳值為10,為形參b傳值為20。進入add方法,add方法中下一句又為參數a重新賦值為30,此時a的值會變為30。為參數b重新賦值為70,此時b的值變為70。下一句定義一個局部變數sum,sum值為a,b相加為100。下一句列印sum變數值,到此,add方法結束回到main方法。下一句是列印變數a的值,在main方法中a值為10,所以列印10。下一句列印b變數值,在main方法中b的值是20,所以打20。
由於add是靜態方法,所以,可以直接用類名.方法名調用。
主方法是程序的入口,是jvm執行程序時所必須的方法。

閱讀全文

與為什麼在靜態方法中不能使用泛型相關的資料

熱點內容
求線段最值問題有哪些方法 瀏覽:557
重復抽樣概率的計算方法 瀏覽:405
去臉上痘痘的簡單方法 瀏覽:985
最簡單的機器操作方法 瀏覽:39
控油壺使用方法 瀏覽:467
高音技巧及發聲方法 瀏覽:356
小學算術正確的學習方法 瀏覽:507
測量卡尺的方法 瀏覽:888
安卓手機設置相機在哪裡設置方法 瀏覽:827
手機面膜使用方法視頻 瀏覽:467
國際政治學研究方法 瀏覽:934
填志願的步驟及方法2021 瀏覽:931
拍照構圖方法和技巧日落 瀏覽:545
純銀鑒別有哪些方法 瀏覽:572
抓中國斗魚用什麼方法最好 瀏覽:785
計算方法計算結果不能出現分數嗎 瀏覽:883
小臂力量訓練方法 瀏覽:660
計算機檢測方法有哪些 瀏覽:634
決策的基本方法包括哪些 瀏覽:300
食品大腸菌群檢測處理方法 瀏覽:176