Java从枚举类获取文件

ds97pgxw  于 2023-01-19  发布在  Java
关注(0)|答案(3)|浏览(143)

我试图从Java的枚举中得到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");
    }
}

以上代码不起作用;我做这个只是为了展示我想让它做什么。

z9gpfhce

z9gpfhce1#

我不确定是否会将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
n3ipq98p

n3ipq98p2#

你可以使用valueOf()方法来获取对应于给定String的Enum值。2如果你想获取与Enum相关的File,你需要将File作为一个字段存储在Enum类中,并提供一个getter方法来访问它。
下面是一个Enum类的示例,它存储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();
qacovj5a

qacovj5a3#

你可以这样做:

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

相关问题