问题描述
此代码不是我自己的。信用:Java Swing – JFileChooser example
JFileChooser jfc = new JFileChooser(
FileSystemView.getFileSystemView().getHomeDirectory());
请解释这一行代码。我知道它是方法链接,但是FileSystem
是否在对象正确的位置?
那么,JFileChooser
对象将带有两个链接方法的FileSystemView
对象作为参数吗?
getFileSystemView()
方法正在调用getHomeDirectory()
方法吗?
FileChooser1
package com.mkyong.jfileChooser;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;
public class FileChooser1 {
public static void main(String[] args) {
JFileChooser jfc = new JFileChooser(
FileSystemView.getFileSystemView().getHomeDirectory());//<--p
int returnValue = jfc.showOpenDialog(null);
// int returnValue = jfc.showSaveDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File selectedFile = jfc.getSelectedFile();
System.out.println(selectedFile.getAbsolutePath());
}
}
}
解决方法
JFileChooser类定义了多种类型的构造函数(Constructor Overloading)。 构造函数方法之一是JFileChooser(File),它将File对象值作为参数。
在您的代码中,JFileChooser实例是使用表示主目录作为参数的File对象实例创建的。
FileSystemView是带有getFileSystemView静态方法的类,用于返回FileSystemView的实例(因此称为工厂方法,类似于生产某种产品的工厂)。 FileSystemView类型对象中有一个名为getHomeDirectory()的方法,该方法将返回一个File对象,该对象是主目录的抽象。 总结以下代码行:
JFileChooser jfc = new JFileChooser(
FileSystemView.getFileSystemView().getHomeDirectory());
您正在使用构造函数类型JFileChooser(File)实例化JFileChooser的实例,而不是显式传递File值,而是调用FileSystemView方法以返回将作为参数传递给JFileChooser构造函数的值。
相同的代码可以编写如下
FileSystemView fileSystemView = FileSystemView.getFileSystemView();
File file = fileSystemView.getHomeDirectory();
JFileChooser jfc = new JFileChooser(file);//<--p