Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java未命名对象_Java_Android_Object_New Operator_Anonymous Class - Fatal编程技术网

Java未命名对象

Java未命名对象,java,android,object,new-operator,anonymous-class,Java,Android,Object,New Operator,Anonymous Class,我已经学习编码两个月了。我在Android平台上用Java工作。我试图更好地理解未命名的对象 参考本例的第7行,“this.button2.setOnClickListener(new OnClickListener(){…})” a) OnClick侦听器是对象吗?(我想是的,因为使用了“new”关键字) b) 它能(也应该)被命名吗 c) 它将如何命名 d) 将来人们会如何提及它?可能吗?如果需要,可以在运行时对其进行修改吗 e) 这行吗?:“this.button2.setOnClickL

我已经学习编码两个月了。我在Android平台上用Java工作。我试图更好地理解未命名的对象

参考本例的第7行,“this.button2.setOnClickListener(new OnClickListener(){…})”

a) OnClick侦听器是对象吗?(我想是的,因为使用了“new”关键字)

b) 它能(也应该)被命名吗

c) 它将如何命名

d) 将来人们会如何提及它?可能吗?如果需要,可以在运行时对其进行修改吗

e) 这行吗?:“this.button2.setOnClickListener(OnClickListener namedObject=new OnClickListener(){//methods go here}”)

a)是的,它是一个对象

b)是的,它可以命名,但不一定需要命名(如果您将来不需要引用它,或使用其他方式引用它)

c)您可以:

OnClickListener myOnClickListener = new OnClickListener() {
    // Contents of the OnClickListener go here...
}
this.button2.setOnClickListener(myOnClickListener);
d)如果您已经命名了它(如上所示),则可以通过名称来引用它。如果通过调用对象上的任何mutator方法对其进行引用,则可以在运行时引用它

e)该语法无效。请参阅(c)以了解进行此调用的正确方式。

a)是的,它是一个对象

b)是的,它可以命名,但不一定需要命名(如果您将来不需要引用它,或使用其他方式引用它)

c)您可以:

OnClickListener myOnClickListener = new OnClickListener() {
    // Contents of the OnClickListener go here...
}
this.button2.setOnClickListener(myOnClickListener);
d)如果您已经命名了它(如上所示),则可以通过名称来引用它。如果通过调用对象上的任何mutator方法对其进行引用,则可以在运行时引用它


e)该语法无效。请参阅(c)以了解进行此调用的正确方法。

正如您所怀疑的,OnClickListener是一个对象,被称为匿名类/对象。它不需要命名,因为它被用作对象按钮2的“回调”。这意味着你正在给button2一个对象,这个button2将委派一些工作。在这种情况下,该工作就是单击按钮时发生的一切

因此,单击按钮时,它将调用您在此处设置的对象。为了发挥作用,必须定义“onClick”方法,您可以在代码示例中这样做。由于该方法存在,button2可以调用它,并执行您提供的代码——在本例中,创建一个意图对象并启动一个活动

因为它是在函数调用中声明的,所以一旦该函数调用完成,它就会超出范围,并且您无法引用它。没有特别的理由为此命名它(button2将有一个您无法访问或不关心的内部名称)。如果在函数调用之外声明类,则可以命名它并在以后引用它。。。但通常这是不需要的


我认为它可以在运行时修改,但除非必要,否则应该避免这种复杂性。

正如您所怀疑的,OnClickListener是一个对象,被称为匿名类/对象。它不需要命名,因为它被用作对象按钮2的“回调”。这意味着你正在给button2一个对象,这个button2将委派一些工作。在这种情况下,该工作就是单击按钮时发生的一切

因此,单击按钮时,它将调用您在此处设置的对象。为了发挥作用,必须定义“onClick”方法,您可以在代码示例中这样做。由于该方法存在,button2可以调用它,并执行您提供的代码——在本例中,创建一个意图对象并启动一个活动

因为它是在函数调用中声明的,所以一旦该函数调用完成,它就会超出范围,并且您无法引用它。没有特别的理由为此命名它(button2将有一个您无法访问或不关心的内部名称)。如果在函数调用之外声明类,则可以命名它并在以后引用它。。。但通常这是不需要的


我认为它可以在运行时修改,但除非必要,否则应该避免这种复杂性。

这是java的匿名类。
您不需要命名它,当然您可以命名它,但是如果该类只使用一次,为了方便起见,您可以使用匿名类。
New onclicklistener()表示此匿名类是从onclicklistener派生的。

您可能还想在匿名类中实现一些接口。

这是java的匿名类。
您不需要命名它,当然您可以命名它,但是如果该类只使用一次,为了方便起见,您可以使用匿名类。
New onclicklistener()表示此匿名类是从onclicklistener派生的。

您可能还希望在匿名类中实现一些接口。

a。OnClickListener是一种类型(抽象类/接口),它碰巧有一个需要实现的方法。在本例中,您只是实现了缺少的方法“inline” B它可以被命名。但是没有一件事是应该是这样的。这是一个选择的问题。如果要多次重用同一对象,可以将其命名

c。通过实现内联,例如:

OnClickListener ocl = new OnClickListener() {
    public void onClick() {
       ...
    }
}

OR

public class MyOnClickListener extends OnClickListener {
    public void onClick() {
       ...
    }
}
OnClickListener ocl = new MyOnClickListener()
我假设OnClickListener在这里是一个抽象类。如果它是一个接口,只需将单词extends改为implements。其余的都一样

d。如果将其分配给变量,则可以这样引用。如果以内联方式实现,则不能引用实现


e。在参数中指定变量无效。

a。OnClickListener是一种类型(抽象类/接口),它碰巧有一个需要实现的方法。在本例中,您只是实现了缺少的方法“inline” B它可以被命名。但是没有成功