【问题标题】:how to call method that contains array如何调用包含数组的方法
【发布时间】:2014-01-31 10:37:21
【问题描述】:

这里是初学者。我试图从一个类中调用一个方法以在主类中运行。但我似乎无法弄清楚为什么它不起作用。这是我如何称呼班级

public static void main(String[] args) {
      findMP3Tracks FT = new findMP3Tracks();
      FT.findMP3();

这是我要调用的类方法

public static List<String> findMP3(String p)
{
    List<String> foundMP3Tracks = new ArrayList<>();

    try (DirectoryStream<Path> folderContents = Files.newDirectoryStream(Paths.get(p))) 
    { 
        //Look for 
        for (Path folderItem: folderContents){ 
 if(Files.isDirectory(folderItem, LinkOption.NOFOLLOW_LINKS)) {
                foundMP3Tracks.addAll(findMP3(folderItem.toString()));
            }
            else if(isValidMP3(folderItem.toString())) {
                foundMP3Tracks.add(folderItem.toString());
            }
        }
    } 

【问题讨论】:

  • 你应该发布你得到的错误。

标签: java


【解决方案1】:

方法findMP3 被声明为静态。静态变量和方法是类的成员。

您可以使用类名直接调用它。所以,应该是findMP3Tracks.findMP3()

另外,关于静态方法。如果您确实知道该方法的行为对于不同的实例没有不同,那么您可以/可以将其声明为静态。虽然,这是您将做出的设计决定。如果它确实根据传入的参数表现不同,最好有一个不是静态的方法。

【讨论】:

  • 谢谢你们的回复。我会尽快尝试这个建议。
【解决方案2】:

您已将方法声明为

public static List<String> findMP3(String p)

这意味着(除其他外)当你调用它时,你将传入一个String 参数。但是你写了

FT.findMP3();

您根本没有传递任何参数。类似的东西

FT.findMP3("Hello");

会编译;或者,如果您有一个 String 变量,其值是您要搜索的 MP3 的名称,您也可以使用它。但是对任何方法的调用都必须与该方法的声明相匹配。

【讨论】:

    【解决方案3】:

    假设findMP3(String)findMP3Tracks 类中的一个方法(我建议你遵循Java conventions for class names),你可以在main 中调用它:

    public static void main(String[] args) {
          ...
          List<String> result = findMP3Tracks.findMP3("Name of MP3");
    }
    

    您可以使用类名findMP3Tracks 来调用方法findMP3,因为它被声明为static。所以没有必要创建一个实例来调用它。 (当然,您可能希望为其他操作创建该类的实例)

    此外,由于findMP3 返回的是List&lt;String&gt;,您可能希望将其存储在变量中(在示例中为result

    【讨论】:

      【解决方案4】:

      首先,你不需要实例来调用静态方法,所以这一行

      findMP3Tracks FT = new findMP3Tracks();
      

      没用,你可以去掉。

      使用(例如)

      findMP3Tracks.findMP3("Some MP3 name");
      

      还需要获取返回值,所以应该是:

      final List<String> mp3List = findMP3Tracks.findMP3("Some MP3 name");
      

      PS:在Java中按照约定类名以大写开头,我建议你将findMP3Tracks类名改为FindMP3Tracks

      【讨论】:

        猜你喜欢
        • 2018-11-12
        • 2011-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-17
        • 2012-03-08
        相关资源
        最近更新 更多