簡體   English   中英

返回getClass方法的類型

[英]Return type of getClass method

Object方法getClass()的文檔說:

實際的結果類型是Class<? extends |X|> Class<? extends |X|> where |X| 是調用getClass的表達式的靜態類型的擦除。

那么為什么foo編譯但不是bar

static void foo(String s) {
    try {
        Class<? extends String> clazz = s.getClass();
    } catch (Exception e) {

    }
}

static <T> void bar(T t) {
    try {
        Class<? extends T> clazz = t.getClass();
    } catch (Exception e) {

    }
}

編輯

我接受了yshavit的答案,因為它清楚地回答了我的問題,但我仍然很想知道他們為什么這樣定義它。 他們可以將它定義為Class<? extends T> Class<? extends T>其中T是表達式的靜態類型。 我不清楚為什么在這個階段刪除類型信息是必要的。 如果類型是List<String> ,則有意義,但如果它是T ,則無效。 我會向任何解釋這個問題的答案進行投票。

其中|X| 是表達式的靜態類型的擦除 (強調添加)

T t擦除Object ,所以|X| 在這種情況下是Object 這意味着結果類型是Class<? extends Object> Class<? extends Object> (它基本上等同於Class<?> )。

的擦除String s ,在另一方面,是String (因為String是一個reifiable類型-即,不通用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM