在这里完成初学者。我试图从类中调用一个方法来在主类中运行。但我似乎无法弄清楚为什么它不起作用。这是我如何调用类
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());
}
}
}
答案 0 :(得分:3)
假设findMP3(String)
是课程findMP3Tracks
中的一种方法(我建议您关注Java conventions for class names),您可以在主要方面将其称为:
public static void main(String[] args) {
...
List<String> result = findMP3Tracks.findMP3("Name of MP3");
}
您可以使用类findMP3Tracks
的名称来调用方法findMP3
,因为它被声明为静态。因此,没有必要创建一个实例来调用它。 (当然,您可能希望为其他操作创建该类的实例)
此外,由于findMP3
返回List<String>
,您可能希望将其存储在变量中(在示例result
中)
答案 1 :(得分:0)
首先,您不需要实例来调用静态方法,所以这一行
findMP3Tracks FT = new findMP3Tracks();
没用,你可以删除它。
使用(例如)
findMP3Tracks.findMP3("Some MP3 name");
您还需要获取返回值,因此它应该是:
final List<String> mp3List = findMP3Tracks.findMP3("Some MP3 name");
PS:在Java中按惯例类名以大写字母开头,我建议你将findMP3Tracks
类名更改为FindMP3Tracks
答案 2 :(得分:0)
您已将方法声明为
public static List<String> findMP3(String p)
这意味着(除其他外)当你调用它时,你将传递一个String
参数。但你写了
FT.findMP3();
你根本没有传递任何论据。像
这样的东西FT.findMP3("Hello");
会编译;或者如果您有一个String
变量,其值是您要搜索的MP3的名称,您也可以使用它。但是对任何方法的调用必须与该方法的声明匹配。
答案 3 :(得分:-1)
方法findMP3
被声明为静态。静态变量和方法是类的成员。
您可以使用classname直接调用它。所以,它应该是findMP3Tracks.findMP3()
另外,关于静态方法的一个词。如果您确实知道方法的行为对于不同的实例不同,那么您可以/可以将其声明为静态。虽然,这是一个设计决定,你会做。如果基于传入的参数确实表现不同,那么最好有一个不静态的方法。