从 txt 文件创建对象,无需对每个对象进行硬编码

Create Object from txt file without hard coding every object

我正在解决一个问题,我有一个 txt 文件需要转换成对象。我的文件格式是:

阿拉巴马州::蒙哥马利::205764::155.4

州名和首都将作为 加载到哈希图中。我已成功加载 Hashmap,但现在我需要创建每个单独的资本对象。想知道是否有一种方法可以在不对每个 Capital Object 进行硬编码的情况下执行此操作。也许是一个循环?不确定我如何在不硬编码的情况下命名它们。

到目前为止,这是我的主要方法:

 public static void main(String[] args) throws Exception {
    
    Scanner fileReader = new Scanner(new BufferedReader(new FileReader("MoreStateCapitals.txt")));
    Map<String, Object> stateCapitals = new HashMap<>();
    
    while (fileReader.hasNextLine()) {
        String[] columns = fileReader.nextLine().split("::");
        stateCapitals.put(columns[0], columns[1]);
    }
    
    Set<String> states = stateCapitals.keySet();
    Collection<Object> capitals = stateCapitals.values();
    
    
}

这是我的 Capital Class,带有 getter、setter 和 Constructor

    
    private String name;
    private int population;
    private double squareMileage;

    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }

    public int getPopulation() {
        return population;
    }
    
    public void setPopulation(int population){
        this.population = population;
    }

    public double getSquareMileage() {
        return squareMileage;
    }
    
    public void setSquareMileage(double squareMileage){
        this.squareMileage = squareMileage;
    }

    public Capital(String name, int population, double squareMileage) {
        this.name = name;
        this.population = population;
        this.squareMileage = squareMileage;
    }
    
}

编辑:txt 文件中的第一个值唯一用于 hashmap 中的键,它不参与对象的创建

我认为您需要更改行:

stateCapitals.put(columns[0], columns[1]);

进入

stateCapitals.put(columns[0], new Capital(columns[1], Integer.parseInt(columns[2]), Double.parseDouble(columns[3]));

这样您将使用构造函数创建对象。这假设您从中读取数据的文件中没有错误 - 如果文件不正确,您可能需要分析 creation/insertion 步骤之前的行。

此外,尽管 ObjectCollection 可以工作,您可能希望将其更改为 Collection<Capitals> 以便能够访问 class 的所有方法].

希望对您有所帮助。祝你好运。