gpt4 book ai didi

java - 在Android Java中,类名放在括号中是什么意思?

转载 作者:行者123 更新时间:2023-11-29 09:52:58 26 4
gpt4 key购买 nike

我好像在声明它的类型两次,一次在括号中,一次在括号外。我正在谈论的一些例子:

HttpURLConnection my_urlConnection = (HttpURLConnection) url1.openConnection();
Button my_button = (Button) findViewById(R.id.btn1);
TextView my_textview = (TextView) findViewById(R.id.textview1);

这是什么意思?

最佳答案

这是一个 Actor 。括号中的类型基本上告诉编译器“尝试将此之后的任何内容视为此类型”。这通常是必需的,因为方法的返回类型是父类的,而您需要一个子类。

例如,在你的第二行代码中,你写:

Button my_button = (Button) findViewById(R.id.btn1);

findViewById 不返回 Button。它返回一个 View。即使它返回的 View 实际上可能是 Button,它也不确定。这是一个只知道 View 的愚蠢方法。所以你需要告诉Java“假设这是一个按钮并将它转换为合适的类型”。如果你改为这样做......

View my_view = findViewById(R.id.btn1);

...你不需要类型转换。您不需要编写 (View)findViewById(R.id.btn1);,因为方法的返回类型和您分配给它的变量类型都匹配。如果您要将子类分配给父类,则也不需要强制转换。这是合法的,没有强制转换:

View my_view = new Button(); // No cast necessary. Button is a subclass of View and can be used anywhere View is used.

这是不合法的:

Button my_button = new View(); // View can't be automatically converted to Button unless it was a Button to begin with.

另请注意,您不能使用强制转换将任何类型转换为任何其他类型。如果对象是该类型,或者是该类型的父类或子类,则只能将对象强制转换为该类型。示例:

try {
View my_view = (View)(new Activity());
}
catch(ClassCastException e)
{
// This will always happen. Activity isn't a parent or subclass of View.
}

有一个 tutorial here这可能对你有帮助。

关于java - 在Android Java中,类名放在括号中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30132940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com