为什么我不能做methodThatReturnsIterator()。next()。length()?

时间:2016-05-09 17:24:51

标签: java string iterator

出于某种原因,这不起作用

    import java.util.*;

 public class SetExample
    {
public static void main(String[] args)
{

    System.out.println(set().next().length());

}

public static Iterator set()
{
    List<String> arr = new ArrayList<>(Arrays.asList("one", "fableeblee", "cacao", "pablo", "thelma", "hepatitis"));
    Iterator<String> itr = arr.iterator();
    System.out.println(itr.next().length());
    return itr;
}   
}   

main中的一行给我一个“找不到符号错误”,但是set()方法中的方法与它类似。为什么是这样?

,当我删除.length()时,它在main中工作得非常好。但是,使用它时,它会起作用。

2 个答案:

答案 0 :(得分:3)

您的方法Intent whatsappIntent = new Intent(Intent.ACTION_SEND); whatsappIntent.setType("text/plain"); whatsappIntent.setPackage("com.whatsapp"); whatsappIntent.putExtra(Intent.EXTRA_TEXT, "The text you wanted to share"); try { activity.startActivity(whatsappIntent); } catch (android.content.ActivityNotFoundException ex) { ToastHelper.MakeShortText("Whatsapp have not been installed."); } 的返回类型为set,而不是Iterator,因此当您从方法返回时收到Iterator<String>时,机器无法知道内部是什么因此,Iterator不能用于一般length

要解决此问题,请添加Object作为返回类型,而不是Iterator<String>

澄清一下,这基本上是封装工作。 Iterator之外的方法不知道其中发生了什么,只是返回set

答案 1 :(得分:2)

您正在返回原始迭代器,并且length()方法的元素未定义。将set()方法更改为返回Iterator<String>