那么,为什么不总是调用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 期望 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的第二个参数是类型字符串。然后尝试传递类型AdapterView的参数将无法使用。 toString()永远不会自动调用,除非串联串(“”+AdapterView也可以工作,但更丑陋)。

编译器决定从方法的名称以及所提供的每个参数的数量和类型中需要哪种方法。在您的第一个示例中,它寻找一种称为makeText的方法,该方法具有AdapterView作为其第二个参数,并且发现无(您的编译错误会告诉您。方法。请注意,编译器无法首先找到该方法,然后使参数拟合,否则我们无法超载方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top