从方法访问 ArrayList 有哪些不同的方式?

What are the different ways of accessing an ArrayList from a method?

我正在编写一些家庭作业程序,我需要尽可能多地使用函数式编程原则来完成 Java 中的内容。这些是接收数字列表并打印偶数的程序的重要部分:

   public static void main( String args[ ] )
   {
      ArrayList<Double> listEven = new ArrayList<Double>();
      inputRecursion( );
      outputRecursion( );
   }

   public static void inputRecursion( )
   {
      Scanner in = new Scanner( System.in );
      if( in.hasNextDouble() )
      {
         if( (in.nextDouble() % 2) == 0 )
         {
            listEven.add( in.nextDouble() );
         }
         inputRecursion( );
      }
   }

   public static void outputRecursion( )
   {
      Iterator<Double> it = listEven.iterator();

      if( it.hasNext() )
      {
         System.out.println( it.next() );
         outputRecursion( );
      }
   }

这是一项正在进行的工作,但我还没有 运行 它并检查逻辑,因为我仍然有两个编译错误:

listEven.add( in.nextDouble() );
Iterator<Double> it = listEven.iterator();

这两行抛出 "cannot find symbol",我知道这是因为 ArrayList 的声明方式使得 main 之外的方法无法访问 in。我对解决这个问题的方法有一个粗略的了解。我知道 setter 和 getter,从我的研究来看它们看起来很简单,但我认为这些是最后的资源,因为我试图避免使用变量(我知道我的程序有其他可变的东西;我正在工作上),以尽可能满足练习的限制。我也知道我可以使它 public 静态,但这会导致出现 15 个以上的错误,从我查找的内容来看,它需要 "initialized" 并且它还涉及变量。

是否有任何其他方法可以通过这两种方法访问 ArrayList?我对不涉及变量或迭代的方式特别感兴趣。

ArrayList 声明为静态但在主函数之外,如下所示:

   static ArrayList<Double> listEven = new ArrayList<Double>();

   public static void main( String args[ ] )
   {
      inputRecursion( );
      outputRecursion( );
   }

   public static void inputRecursion( )
   {
      Scanner in = new Scanner( System.in );
      if( in.hasNextDouble() )
      {
         if( (in.nextDouble() % 2) == 0 )
         {
            listEven.add( in.nextDouble() );
         }
         inputRecursion( );
      }
   }

   public static void outputRecursion( )
   {
      Iterator<Double> it = listEven.iterator();

      if( it.hasNext() )
      {
         System.out.println( it.next() );
         outputRecursion( );
      }
   }