java HashMap$Values不能强制转换为类HashMap

8zzbczxx  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(168)

我有一个类Turnier,在那里我实现了一个HashMap,但是一旦我引用了它,我就会得到一个错误。

package data;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class Turnier implements Comparable<Turnier> {
    
    private String name;
    private int year;
    
    private Collection<Match> matches = new ArrayList <Match>() ;
    private Map<String, Spieler> spieler = new HashMap<String,Spieler>(); 
    
    public Turnier(String name) {
        this.name = name;
        
        this.year = Integer.parseInt(this.name.substring(this.name.length() - 4));
    }
    
    public String getName() {
        return this.name;
    }
    
    public Collection<Match> getMatches() {
        return this.matches;
    }
    
    public void addMatch(Match match) {
        
        getMatches().add(match);
    }
        
    public void addSpieler(Spieler spieler) {
        
        getSpieler().put(spieler.getID(), spieler);
    }
    
    public Map<String, Spieler> getSpieler() {
        return this.spieler;
    }
    
    public int getJahr() {
        return this.year;
    }
    
    public String toString() {
        return this.name;
    }

    @Override
    public int compareTo(Turnier t2) {
        return this.name.compareToIgnoreCase(t2.name);
    }
    
}

但是当我尝试通过getter使用HashMap时,就像这样:我总是遇到异常
HashMap$Values不能强制转换为类HashMap

package io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

import data.Ergebnis;
import data.Satz;
import data.Match;
import data.Spieler;
import data.Turnier;

public class CSVReader extends Reader {

    public CSVReader(String filename) {
        super(filename);
    }

    public CSVReader(File file) {
        super(file);
    }

    
    public void parseLine(String line) {
        String[] tokens = getTokens(line);
        System.out.print(tokens[3]);
        
        if(((HashMap<String,Spieler>)getSpieler()).containsKey("a")) {
            
        }
        
        
        
    }

    
    public String[] getTokens(String line) {
        String[] tokens = line.split(";");
        return tokens;
    }
    
    @Override
    public void parseFile() {
        try (BufferedReader bufR = new BufferedReader(new FileReader(this.file))) {
            String line;
            bufR.readLine(); // erste Zeile ignorieren
            while ((line = bufR.readLine()) != null) {
                parseLine(line);
            }

        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

    public static void main(String[] args) {
        CSVReader reader = new CSVReader(general.Parameters.csvPath);
        reader.parseFile();
        reader.info();

    }
}

这是我的魔法班

package data;

public class Spieler {
    
    private String S_ID;
    private String vorname;
    private String nachname;
    private String geburtstag;
    private String geburtsort;
    private String nationalitaet;
    
    public Spieler(String id, String vorname, String nachname, String geburtstag, String geburtsort, String nationalitaet) {
        this.S_ID = id;
        this.vorname = vorname;
        this.nachname = nachname;
        this.geburtstag = geburtstag;
        this.geburtsort = geburtsort;
        this.nationalitaet = nationalitaet;
    }
    
    public String getID() {
        return this.S_ID;
    }
    
    public String getName() {
        return this.vorname + " " + this.nachname;
    }
    
    public String getVorname() {
        return this.vorname;
    }
    
    public String getNachname() {
        return this.nachname;
    }
    
    public String getGeburtstag() {
        return this.geburtstag; 
    }
    
    public String getGeburtsort() {
        return this.geburtsort; 
    }
    
    public String getNationalitaet() {
        return this.nationalitaet;
    }
    
    public String toString() {
        return this.getName();
    }
}

这是我的阅读课

package io;

import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import data.Spieler;
import data.Turnier;

public abstract class Reader {
    protected File file;
    protected Map <String, Spieler> spieler;
    protected Map <String, Turnier> turniere;

    public Reader(String filename) {
        this(new File(filename));
    }
    
    public abstract void parseFile();
    
    public Reader (File file) {
        this.file = file;
        this.spieler = new HashMap<>();
        this.turniere = new HashMap<>();
    }
    
    public Collection<Spieler> getSpieler() {
        return this.spieler.values();
    }
    

    public Collection<Turnier> getTurniere() {
        return this.turniere.values();
    }
    
    public void info() {
        System.out.println(this.spieler.values().size() + " Spieler");
        //System.out.println(this.spiele.values().size() + " Spiele");
        System.out.println(this.turniere.values().size() + " Turniere");
    }
}

另外,当我不进行类型转换时
(HashMap〈String,Spieler〉)this.getSpieler()).containsKey(“a”)我收到错误消息方法containsKey(String)对于类型Collection是未定义的,这让我很奇怪,因为我的get方法的返回值应该是HashMap〈String,Spieler〉而不是Collection

kxeu7u2r

kxeu7u2r1#

电话

if(((HashMap<String,Spieler>)getSpieler()).containsKey("a"))

位于CSVReader中。CSVReader扩展了Reader,它包含

public Collection<Spieler> getSpieler() {
    return this.spieler.values();
}

如果'spieler'是一个Map,那么根据文档,value()的返回是Map中值的集合,而不是Map。
因此,CSVReader中的调用是Reader中对该例程的调用,并且它返回一个Spielers集合,该集合(如错误消息所述)不能转换为任何类型的Map。

相关问题