我有一个类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
1条答案
按热度按时间kxeu7u2r1#
电话
位于CSVReader中。CSVReader扩展了Reader,它包含
如果'spieler'是一个Map,那么根据文档,value()的返回是Map中值的集合,而不是Map。
因此,CSVReader中的调用是Reader中对该例程的调用,并且它返回一个Spielers集合,该集合(如错误消息所述)不能转换为任何类型的Map。