簡體   English   中英

為什么不總是自動調用toString()

[英]Why isn't toString() always automatically invoked

那么為什么不總是調用toString? 這是使用Android API的示例。

例如

@Override
public void onItemSelected(AdapterView<?> adapterView, View view,
        int position, long id) {
    Toast.makeText(this, adapterView, Toast.LENGTH_LONG).show();
}

不會編譯。 但是,如果我將其更改為

@Override
public void onItemSelected(AdapterView<?> adapterView, View view,
            int position, long id) {
    Toast.makeText(this, adapterView.toString(), Toast.LENGTH_LONG).show();
}

它會。 實際差異是什么?

adapterView不是String

編譯器不會自動調用toString()來執行強制轉換 - 這會破壞類型安全性。 只有當有一個+"" ,編譯器才會自動調用toString()。

編譯器插入toString()的唯一情況是字符串連接。

你總是這么說什么? toString()只是一個返回對象的String表示的方法。 Toast.makeText需要一個String參數,但在第一種情況下,您提供了AdapterView類的對象。 所以它不會編譯:)

這個

@Override
public void onItemSelected(AdapterView<?> adapterView, View view,
            int position, long id) {
    Toast.makeText(this, "" + adapterView, Toast.LENGTH_LONG).show();
}

將編譯;)

我不知道Android API,但是AdapterView實際上並不是CharSequence的子類,所以你必須應用toString()。

我想Toast.makeTest的第二個參數是String類型。 然后嘗試傳遞AdapterView類型的參數將無法正常工作。 永遠不會自動調用toString(),除非連接字符串(“”+ adapterView也可以工作,但更難看)。

編譯器根據方法名稱以及提供的每個參數的數量和類型決定需要哪種方法。 在你的第一個例子中,它查找一個名為makeText的方法,它有一個AdapterView作為它的第二個參數,並且找不到(你的編譯錯誤會告訴你。在你的第二個例子中,第二個參數是一個字符串,編譯器找到匹配注意,編譯器首先找不到方法,然后使參數適合,否則我們不能有重載方法。

暫無
暫無

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

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