Java方法接受列表接口作为参数

Java方法接受列表接口作为参数,java,Java,在采访中让我有些困惑的一点是,他们的方法将列表接口作为参数和返回类型。Comsider是这样的: public List<Interval> merge(List<Interval> intervals) { if(intervals.length()==0) return null; //does not work } if(intervals instanceOf ArrayList){ //Do some work } 但显然我不能检查接口可以

在采访中让我有些困惑的一点是,他们的方法将列表接口作为参数和返回类型。Comsider是这样的:

public List<Interval> merge(List<Interval> intervals) {
  if(intervals.length()==0) return null; //does not work   
}
if(intervals instanceOf ArrayList){
   //Do some work
 }
但显然我不能检查接口可以实现的每个实例,对吗?我的意思是这似乎不实用


有人能解释一下如何在一个接受接口/列表的方法中迭代数据吗?

第一个也是最重要的部分是:你得出了错误的结论。 您不理解Java语法,因此“足够好”;然后你“发现”了错误的问题解释

让我们开始:

public List<Interval> merge(List<Interval> intervals) {
  if(intervals.length()==0) return null; //does not work   
}
更好的是,您可以使用
interval.isEmpty()
。请注意:您不必这样做,但始终使用{大括号}确实是一种很好的做法,即使对于一行if/then/else构造也是如此

下一步:通过

  • for each循环:
    for(Integer bigInt:interval){
  • 循环的密码:
    for(inti=0;i
  • 使用集合界面中提供的
    迭代器
    方法

除此之外,对于“使用接口意味着什么”——请参见。

对于您的第一个问题,列表中没有方法length(),而是size()

看……这就是你能做到的

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        List<Integer> a= new ArrayList();
        asd(a);
    }
    static void asd(List<Integer> a){
        Iterator<Integer> it = a.iterator();
        while(it.hasNext()){
            System.out.print(it.next()); //or do some merge work
        }
    }
}
import java.util.*;
导入java.lang.*;
导入java.io.*;
/*只有当类是公共的时,类的名称才必须是“Main”*/
表意文字
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
//你的密码在这里
列表a=新的ArrayList();
建筑署署长(a);
}
静态无效asd(列表a){
迭代器it=a.Iterator();
while(it.hasNext()){
System.out.print(it.next());//或执行一些合并工作
}
}
}

“既然我甚至无法访问列表,我该怎么做。”你能告诉我你尝试了什么以及它的实际问题是什么吗?使用接口的目的是能够处理任何类型的列表,而不需要为每个可能的实现使用特殊的代码。为什么你不能使用列表接口的方法呢?确保
java.util.list
正确导入。你在线搜索了这个,但是你没有考虑咨询JavaDoc吗?我想这也可能是一个评论。海报刚刚得到了错误的方法,并在一个切切实实的事情上发生了很大的变化,这是一个错误的逻辑等价物,不太可能帮助其他人。“有人能解释一下如何在接受接口/列表的方法中迭代数据吗?",我认为你没有解决这个问题。@user2441441这种情况发生了,而且完全合理。评论的目标是回答者,而不是询问者——他们在帮助保持网站质量方面负有更大的责任。@GhostCat是的,我认为扩展你答案的善意努力并不能解决这个问题,这不是因为我的答案是正确的这很糟糕,但因为我认为这个问题不值得一开始就这样回答。请看投票结果和海报上的评论。这基本上是一个打字错误。很难看出更详细的答案如何能帮助其他人——他们永远不会根据这个问题来回答。
public List<Interval> justReturnListIfNotEmpty(List<Interval> intervals) {
  if (intervals == null || intervals.size () == 0) {
    return null; 
  } else {
    return intervals;
  }
}
import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        List<Integer> a= new ArrayList();
        asd(a);
    }
    static void asd(List<Integer> a){
        Iterator<Integer> it = a.iterator();
        while(it.hasNext()){
            System.out.print(it.next()); //or do some merge work
        }
    }
}