gpt4 book ai didi

java - 构造函数中的动态方法定义

转载 作者:行者123 更新时间:2023-12-01 08:03:57 25 4
gpt4 key购买 nike

在做android开发的时候,经常会遇到这样的代码:

timer = new CountDownTimer(counter, 1000) {
public void onTick(long remainingTimeMillis) {
counter = remainingTimeMillis;
displayCount(counter);
}
public void onFinish() {
displayCount(0);
counter = 0;
timer = null;
beep.start();
}
};

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String s = (String) v.getTag();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, s, duration);
toast.show();

}
});

我在Java的其他领域从未见过这样的用法,有人可以解释一下调用构造函数然后在其中定义其他一些方法时的含义吗,这就像为我定义一个类一样。而通常什么情况下我们需要使用这种结构呢?非常感谢。

最佳答案

这称为匿名类。在构造函数后面的括号中,您创建一个扩展提到的类或实现提到的接口(interface)的类,覆盖它的方法和/或定义新的方法和字段,然后创建这个新类的实例。

这个新类没有名称,无法引用对象。当您需要实现某些类/接口(interface)的抽象方法、创建单个对象并将该对象作为参数传递时,通常会使用它。

例如,OnClickListener接口(interface)有一个抽象方法onClick(),当点击事件被触发时,它被用作回调。如果没有匿名类,则首先需要声明实现给​​定接口(interface)的类,然后创建它的对象,然后将其作为参数传递给带有显式转换的 setOnClickListener 方法。使用匿名类,可以用更少的代码和更高的可读性来编写它。

关于java - 构造函数中的动态方法定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23047907/

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