【问题标题】:How to pass a String argument to ArrayList parameter如何将字符串参数传递给 ArrayList 参数
【发布时间】:2011-06-29 14:26:21
【问题描述】:

我正在尝试将字符串参数传递给 ArrayList 参数,如下所示:

Class A {
 public void testA (ArrayList arrayInput) {
      // Implement function
      System.out.println("In testA function");
   }
  String a = "new";
  testA(a);
}

我这样做是因为我想使用相同的函数来传递 String 值和 ArrayList 值。有解决办法吗?

谢谢, 索尼

【问题讨论】:

    标签: java string arraylist parameter-passing casting


    【解决方案1】:
    // Option 1: print in String - preferred
    public void testA(ArrayList<String> list) {
        for(String str : list) testA(str);
    }
    
    public void testA(String s) {
        System.out.println(s);
    }
    
    
    
    // Option2: print in List - not so preferred
    public void testA(ArrayList<String> list) {
        for(String str : list) System.out.println(str);
    }
    
    public void testA(String s) {
        ArrayList<String> list = new ArrayList<String>();
        list.add(s);
        testA(list);
    }
    

    【讨论】:

      【解决方案2】:

      如果你想用同一个函数来传递两种类型,你必须重载函数:

          Class A {
           public void testA (ArrayList arrayInput) {
                // Implement function
                System.out.println("In testA function");
             }
           public void testA (String stringInput) {
                // Implement function
                System.out.println("In testA function. For String!");
             }
            String a = "new";
            testA(a);
          }
      

      或者你可以用泛型写一个函数:

      public void testA<T>(T input){...}
      

      【讨论】:

      • 如果我错了,请原谅我,但这不应该是重载函数而不是覆盖吗?
      • 嗯..如果两个重写函数的实现本质上产生相同的输出会怎样。如果我传递一个只有一个元素“hello”的 ArrayList 并打印 ArrayList 的所有元素,输出将是“hello”。这相当于传递一个值为“hello”的单个字符串。但是,如果 arraylist 更长,那么我会打印更多的值。本质上,两个被覆盖的函数都具有相同的功能——比如在这种情况下打印。这是我正在尝试做的一个简短的例子。谢谢!!!!
      • 使用泛型比并检查 T 是否为字符串,而不是为“特殊”情况编写一个开关代码。
      • @ultor 这是一个非常糟糕的决定......真的......对不起伙计
      • @ultor 请允许我澄清一下:您的帖子是一个伟大的决定。您对使用泛型的评论,然后检查类型,这是一个糟糕的决定。我个人会做你帖子第一部分的内容。
      【解决方案3】:

      您可以按照其他答案的建议编写重载方法。

      或者,您可以简单地将String 对象包装在List 中并将其传递给testA,如下所示:

      public static <A> void testA(List<A> list) {
        // some code that works over list
        System.out.println("In testA method");
      }
      
      String a = "new";
      testA(Arrays.asList(a));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-12
        • 2018-05-07
        相关资源
        最近更新 更多