【问题标题】:The difference between the two statements in androidandroid中这两种语句的区别
【发布时间】:2014-03-03 22:02:29
【问题描述】:


我是android新手,对java没有太多了解。但了解面向对象的概念。
我从这个网站创建了一个自定义列表视图,并且我能够以某种方式实现它。

http://androidexample.com/How_To_Create_A_Custom_Listview_-_Android_Example/index.php?view=article_discription&aid=67&aaid=92

adapter=new CustomAdapter(CustomListView, CustomListViewValuesArr,res);<br>

文章中使用了上述说法,并有截图。但是当我给出相同的声明时,eclipse 显示“无法实例化类型 customadapter”。我尝试清理项目,但没有奏效。但是,当我在最后添加两个大括号时,eclipse 没有显示错误并且可以正常工作。

adapter=new CustomAdapter(CustomListView, CustomListViewValuesArr,res){};

我不知道为什么?问题是为什么添加大括号有效?它是 java 的东西/android 的东西还是我可能不知道的一些 OOPS 概念。

【问题讨论】:

  • 在语句末尾使用 {} 意味着您正在创建一个令人讨厌的 CustomAdapter 派生类型。如果没有 {},您将尝试实例化 CustomAdapter。类似于 new SomeInterface(); 的区别; //编译错误和:new SomeInterface() { ... };

标签: java android oop syntax


【解决方案1】:

你确定你完全按照这个例子吗?当您尝试实例化接口时通常会发生此错误,或者我相信也使用抽象类,本质上两者都不能实例化。检查您的CustomAdapter 实现是否是其中之一。

在您的第二个示例中,您正在创建CustomAdapter 的匿名子类/实现,因此您有一个具体的可实例化类并且错误消失了。

【讨论】:

  • 感谢您的回复。我试图实例化一个抽象类。
【解决方案2】:

答案很简单。 CustomAdapter 类不存在。当您执行new CustomAdapter() 时,您正在创建一个对象,即类CustomAdapter 的一个实例。 但是在你的项目中这个类不存在。您必须在名为 CustomAdapter.java 的文件中创建它,或者您必须在该 {} 中声明。

添加括号意味着您在一行中创建了一个新类的对象,其中包含您应该在括号内编写的方法。

在您已实施 CustomAdapter 的示例中。试着做到这一点,一切都会好起来的。

但是,这不是 Android 的东西。这是基本的 oop ;)

【讨论】:

  • 虽然大部分内容是正确的,但我认为您的反对票来自“CustomAdapter 类不存在”的替代方案。它可能是一个接口,也可能是一个抽象类、私有构造函数……或者可能还有其他我不知道的。
  • 是的,我明白了。我只提出了最简单的解决方案,没有考虑其他替代方案。对不起。
  • 实际上,我是投反对票的人。我可能应该留下一个解释,对不起。 CustomAdapter 不存在显然是错误的,因为添加 {} 允许它编译。此外,虽然添加{} 确实意味着一个新类,但它是一个派生自命名类型的匿名类,在本例中为CustomAdapter。您没有声明一个名为 CustomAdapter 的新类,其中没有以前的 CustomAdapter 类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 2022-01-02
  • 1970-01-01
相关资源
最近更新 更多