Java从枚举类中获取文件



我试图从Java中的enum中获取File,就像每当我键入DBIO.DBFOLDER时,它应该转换为我指定的文件。有什么办法吗?

package test.Test;
import java.io.File;
public enum DBIO{
DBFOLDER(),DBFILE();
public File DBFOLDER(){
return new File("project/DBFolder");
}
public File DBFILE(){
return new File(DBFOLDER()+"/DBFile");
}
}

上面的代码不起作用;我只是想让它显示我想让它做什么。

我不确定我会为这个用例使用enum,但是,您需要将值与每个enum案例相关联,例如…

public enum DBIO {
DBFOLDER(new File("project/DBFolder")), DBFILE(new File(DBIO.DBFOLDER.getPath(), "DBFile"));
private File file;

private DBIO(File file) {
this.file = file;
}

public File getPath() {
return file;
}

}

所以如果你要做这样的事情…

System.out.println(DBIO.DBFOLDER.getPath());
System.out.println(DBIO.DBFILE.getPath());

它会打印…

project/DBFolder
project/DBFolder/DBFile

您可以使用valueOf()方法来获取与给定String对应的Enum值。如果你想让File与Enum相关联,你需要将File作为一个字段存储在Enum类中,并提供一个getter方法来访问它。

下面是一个枚举类的例子,它存储了一个File,并提供了一个getter方法来访问它:

public enum FileEnum {
FILE_1("file1.txt", new File("file1.txt")),
FILE_2("file2.txt", new File("file2.txt"));
private final String name;
private final File file;
FileEnum(String name, File file) {
this.name = name;
this.file = file;
}
public File getFile() {
return file;
}
}

然后可以使用getter方法访问与Enum相关的文件,如下所示

File file = FileEnum.FILE_1.getFile();

你可以这样做:

import java.io.File;
interface Get< T > {
T get();
}
enum DBio {
DBFOLDER( new Get< File >() {
public File get() {
return new File( "project/DBFolder" );
}
} ),
DBFILE( new Get< File >() {
public File get() {
return new File( DBio.DBFOLDER.get() + "/DBFile" );
}
} );
private Get< File > fileLoader;
DBio( Get< File > fileLoader ) {
this.fileLoader = fileLoader;
}
public File get() {
return this.fileLoader.get();
}
public File DBFOLDER() {
return new File( "project/DBFolder" );
}
public File DBFILE() {
return new File( DBFOLDER() + "/DBFile" );
}
}

我们使用Get接口的匿名类只在被请求时加载文件。

如果直接传递,文件将被加载一次并保存在内存中,始终共享一个引用。

你可以用lambda:

替换匿名类
// ... rest of code equals
DBFOLDER(() -> new File( "project/DBFolder" )),
DBFILE(() -> new File( DBio.DBFOLDER.get() + "/DBFile" ))
// ... rest of code equals

最新更新