ToString()が常に自動的に呼び出されないのはなぜですか
-
11-10-2019 - |
質問
では、なぜ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();
}
そうなる。実際の違いは何ですか?
解決
いつもとはどういう意味ですか? toString()
aを返す方法です String
オブジェクトの表現。 Toast.makeText
a String
パラメーターですが、最初の場合には、 AdapterView
クラス。だからコンパイルしない:)
他のヒント
adapterView
ではありません String
.
toString()
キャストを実行するためにコンパイラによって自動的に呼び出されたわけではありません - それはタイプの安全性を少し損なうでしょう。ある場合にのみ +""
たとえば、コンパイラはtoString()を自動的に呼び出します。
コンパイラによってtoString()が挿入される唯一の状況は、文字列連結です。
また、これ
@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の2番目のパラメーターは型文字列のものだと思います。次に、タイプAdapterViewのパラメーターを渡そうとすることは機能しません。 toString()は、文字列を連結する場合を除き、自動的に呼び出されることはありません( ""+adapterViewも同様に機能しますが、より醜いです)。
コンパイラは、メソッドの名前と提供される各引数の数とタイプから必要な方法を決定します。最初の例では、2番目のパラメーターとしてAdapterViewを備えたMaketextというメソッドを探します。方法。コンパイラが最初にメソッドを見つけられないことに注意してから、パラメーターを適合させることに注意してください。そうでなければ、メソッドを過負荷にすることはできませんでした。