请说明下面的代码行

问题描述

代码不是我自己的。信用: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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...