请解释下面显示的一行代码

djmepvbi  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(377)

这个代码不是我自己的。来源:java swing–jfilechooser示例

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());
    }
}

}

quhf5bfb

quhf5bfb1#

jfilechooser类定义了多种类型的构造函数(构造函数重载)。其中一个构造函数方法是jfilechooser(file),它以文件对象值作为参数。
在您的代码中,jfilechooser示例是用一个表示homedirectory的文件对象示例作为参数创建的。
filesystemview是一个带有getfilesystemview静态方法的类,用于返回filesystemview的示例(因此称为工厂方法,类似于生产某些产品的工厂)。filesystemview类型对象中有一个名为gethomedirectory()的方法,该方法将返回作为homedirectory抽象的文件对象。总结以下代码行:

JFileChooser jfc = new JFileChooser(
        FileSystemView.getFileSystemView().getHomeDirectory());

您正在使用构造函数类型jfilechooser(file)示例化jfilechooser的示例,而不是显式传递文件值,而是调用filesystemview方法返回将作为参数传递给jfilechooser构造函数的值。
同样的代码可以写如下

FileSystemView fileSystemView = FileSystemView.getFileSystemView();
    File file = fileSystemView.getHomeDirectory();
    JFileChooser jfc = new JFileChooser(file);//<--p

相关问题