我一直在学习编码2个月。我在Android平台上使用Java。我想更好地理解未命名的对象。
参考本例的第7行,“this.button2.setOnClickListener(new OnClickListener(){...});”
a)OnClickListener是一个对象吗? (我认为是,因为使用了“new”关键字)
b)可以(并且应该)命名吗?
c)如何命名?
d)未来如何引用它?可能吗?如果需要,可以在运行时修改它吗?
这是否有效?:“this.button2.setOnClickListener(OnClickListener namedObject = new OnClickListener(){// methods to here});”@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
this.button2 = (Button) this.findViewById(R.id.button2);
this.button2.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
Intent i = new Intent(getApplicationContext(), Absolute.class);
startActivity(i);
}
});
}
答案 0 :(得分:4)
a)是的,它是一个对象。
b)是的,它可以被命名,但它不一定需要(如果您将来不需要引用它,或者有其他方式引用它它)。
c)您可以这样做:
OnClickListener myOnClickListener = new OnClickListener() {
// Contents of the OnClickListener go here...
}
this.button2.setOnClickListener(myOnClickListener);
d)如果您已将其命名(如上所示),则可以通过名称引用它。如果您通过在对象上调用任何mutator方法来引用它,则可以在运行时引用它。
e)该语法无效。有关拨打此电话的正确方法,请参阅(c)。
答案 1 :(得分:0)
正如您所怀疑的,OnClickListener是一个对象,被称为匿名类/对象。它不需要命名,因为它被用作对象button2的“回调”。这意味着你正在处理button2一个对象,button2将委托一些工作二。在这种情况下,该工作是单击按钮时发生的所有事情。
因此,单击该按钮时,它将调用您在此处设置的对象。为了运行,必须定义'onClick'方法,您可以在代码示例中进行定义。因为那个方法在那里,button2能够调用它,并执行你提供的代码 - 在这种情况下创建一个Intent对象并启动一个活动。
因为它是在函数调用中声明的,所以一旦函数调用完成,它就会超出范围而你无法引用它。由于这个原因,没有特别的理由给它命名(button2将有一个你无法访问或不关心的内部名称)。如果在函数调用之外声明该类,则可以为其命名并稍后引用它......但通常不需要这样做。
我认为它可以在运行时修改,但除非必要,否则应该避免这种复杂性。
答案 2 :(得分:0)
这是java的匿名类
您无需为其命名,当然您可以为其命名,但如果该类仅使用一次,则可以使用匿名类以方便使用。
新的onclicklistener()意味着这个匿名类派生自onclicklistener
您可能还想在匿名类中实现一些接口。
答案 3 :(得分:0)
一个。 OnClickListener是一个类型(抽象类/接口),碰巧有一个需要实现的方法。在这种情况下,您只需实现缺少的方法" inline" 湾它可以命名。但是没有应该这样的事情。这是一个选择问题。如果您打算多次重复使用同一个对象,可以为其命名。
℃。通过内联实现:
OnClickListener ocl = new OnClickListener() {
public void onClick() {
...
}
}
OR
public class MyOnClickListener extends OnClickListener {
public void onClick() {
...
}
}
OnClickListener ocl = new MyOnClickListener()
我假设OnClickListener是一个抽象类。如果它是一个接口,您只需将单词extends更改为implements。其余的保持不变。
d。如果将其分配给变量,则可以这样引用。如果您以内联方式实现它,则无法参考该实现。
即在参数中分配变量无效。