Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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 - Fatal编程技术网

如何在java中使用抽象方法而不定义它?

如何在java中使用抽象方法而不定义它?,java,android,Java,Android,在android列表界面中 我有 private List<Contact> contacts; 但get是列表接口中定义的抽象方法 那么这怎么可能写呢 完整代码: 公共类ListViewActivity扩展了AppCompatActivity{ @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity\u list

在android列表界面中

我有

private List<Contact> contacts;
但get是列表接口中定义的抽象方法

那么这怎么可能写呢

完整代码:

公共类ListViewActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u list\u视图);
ListView ListView=(ListView)findViewById(R.id.list);
setAdapter(新联系人适配器(this));
}
类ContactsAdapter扩展了ArrayAdapter{
私人名单联系人;
公共联系人适配器(上下文){
super(上下文-1);
this.contacts=MockDataGenerator.getMockContacts(1000);
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,
@非空视图组(父视图组){
持票人持票人;
if(convertView==null){
convertView=LayoutInflater.from(getContext())
.充气(R.layout.contact_项目,父项,假);
viewHolder=新的viewHolder(转换视图);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
触点=触点。获取(位置);
viewHolder.nameTextView.setText(contact.getName());
viewHolder.mobileTextView.setText(contact.getMobile());
viewHolder.landlineextview.setText(contact.getLandline());
返回视图;
}
@凌驾
public int getCount(){
返回此.contacts.size();
}
类视图持有者{
私有文本视图名称文本视图;
私有文本视图mobileTextView;
私有TextView-landinetextview;
公共视图持有者(@NonNull视图){
this.nameTextView=(TextView)视图
.findViewById(R.id.name\u text\u视图);
this.mobileTextView=(TextView)视图
.findviewbyd(R.id.mobile\u text\u视图);
this.landinetextView=(TextView)视图
.findviewbyd(R.id.landline\u text\u view);
}
}
}
}
模拟触点生成器:

public static List<Contact> getMockContacts(int length) {
    ArrayList<Contact> mockContacts = new ArrayList<>();
    for (int i = 0; i < length; i++) {
        mockContacts.add(getMockContact());
    }
    return mockContacts;
}
publicstaticlist getMockContacts(int-length){
ArrayList mockContacts=新的ArrayList();
for(int i=0;i
您的
联系人
列表已在构造函数中初始化:

public ContactsAdapter(Context context) {
    super(context, -1);
    this.contacts = MockDataGenerator.getMockContacts(1000);
}

因此,这里我假设您的
MockDataGenerator
正在生成一个包含一千个mock联系人的列表
MockDataGenerator。getMockContacts(1000)
正在返回一个扩展
list
的具体类型的实例(因此必须为
get()
定义一个实现)。调用
contacts.get(position)
时,这是一个虚拟方法调用,JVM将使用
MockDataGenerator返回的类型提供的实现。getMockContacts(1000)
它返回列表接口的抽象方法,因为接口定义了该方法。但这并不意味着在运行时(当您的程序被执行时),它正是这样执行的。相反,
列出联系人
;`引用类导入此确切接口的任何对象。例如,有两种广泛使用的列表实现:ArrayList和LinkedList。它们都实现了列表接口,并提供了自己的方法实现。get(i)是这些方法之一。让我在实践中向你们展示:

public class Example {
private static List<String> stringList = null;

public static void main(String[] args) {
    initList();

    final String s = stringList.get(0);
}

public static void initList() {
    stringList = new ArrayList<>();
    stringList.add("OneString");
    stringList.add("SecondString");
}
公共类示例{
私有静态列表stringList=null;
公共静态void main(字符串[]args){
initList();
最终字符串s=stringList.get(0);
}
公共静态void initList(){
stringList=新的ArrayList();
stringList.add(“OneString”);
添加(“第二个字符串”);
}
}


这里
stringList.get(0)
还返回抽象方法get。但在运行时,它会调用ArrayList的方法,因为ArrayList是对象的类型,ArrayList会覆盖此方法。

您是否向
get
传递了一个数字?像
联系人。获取(2)
?位置是列表中对象的索引。所有接口方法都是抽象的(在接口上)。但是,如果您在对象上调用方法,那么该对象perforce有一个具体的类,所有抽象方法的定义都继承自超类和实现的接口。调用与对象类关联的方法实现。我的问题是,由于联系人是一个列表,如何使用contacts.get(position)如果我没有实现get method只是为了添加,我相信默认实现是在java 8中添加的。。。。因此,从技术上讲,接口可以提供默认实现。这并不是对您的特定问题的回答,而是通常与问题相关。公共静态列表getMockContacts(int-length){ArrayList mockContacts=new ArrayList();for(int i=0;iList是一个接口,它定义了对象需要使用的方法,但它不告诉您将使用什么实现。但是,当您调用
getMockContacts
时,该实现会创建
ArrayList
@raxx的一个实例,因为
contacts
有一个实际的实现类
ArrayList
,它确实实现了
get
。但是getMockContacts()的返回类型是List,但是
public ContactsAdapter(Context context) {
    super(context, -1);
    this.contacts = MockDataGenerator.getMockContacts(1000);
}
public class Example {
private static List<String> stringList = null;

public static void main(String[] args) {
    initList();

    final String s = stringList.get(0);
}

public static void initList() {
    stringList = new ArrayList<>();
    stringList.add("OneString");
    stringList.add("SecondString");
}