获取父子类java的不兼容错误
我定义了一个HashMap:获取父子类java的不兼容错误,java,inheritance,casting,Java,Inheritance,Casting,我定义了一个HashMap: HashMap<String,ArrayList<Thing>> hashmap = new HashMap<>(); 这就是错误: no suitable method found for put(String,ArrayList<SeaPort>) method Map.put(String,ArrayList<Thing>) is not applicable (argument
HashMap<String,ArrayList<Thing>> hashmap = new HashMap<>();
这就是错误:
no suitable method found for put(String,ArrayList<SeaPort>)
method Map.put(String,ArrayList<Thing>) is not applicable
(argument mismatch; ArrayList<SeaPort> cannot be converted to ArrayList<Thing>)
method AbstractMap.put(String,ArrayList<Thing>) is not applicable
(argument mismatch; ArrayList<SeaPort> cannot be converted to ArrayList<Thing>)
method HashMap.put(String,ArrayList<Thing>) is not applicable
(argument mismatch; ArrayList<SeaPort> cannot be converted to ArrayList<Thing>)
海港
可以扩展东西
,但数组列表
不扩展数组列表
如果只想存储字符串到对象的映射,则不需要ArrayList。如果确实要将字符串映射到事物列表,则不能这样做。ArrayList
不扩展ArrayList
如果您想使用这样的HashMap,一个解决方案可以是使用模板编写自己的包装器类:
import java.util.ArrayList;
import java.util.HashMap;
public class MyHashMap<T extends Thing> {
private HashMap<String, ArrayList<T>> map;
public MyHashMap() {
map = new HashMap<>();
}
public void add(String s, T element) {
ArrayList<T> list = null;
if ((list = map.get(s)) == null)
map.put(s, list = new ArrayList<T>());
list.add(element);
}
public ArrayList<T> get(String s) {
return map.get(s);
}
}
import java.util.ArrayList;
导入java.util.HashMap;
公共类MyHashMap{
私有哈希映射;
公共MyHashMap(){
map=新的HashMap();
}
公共void add(字符串s,T元素){
ArrayList list=null;
if((list=map.get(s))==null)
put(s,list=newarraylist());
列表。添加(元素);
}
公共ArrayList get(字符串s){
返回地图。获取(s);
}
}
如果你想要海港的HashMap,你可以像这样创建一个新的HashMap
MyHashMap<SeaPort> map = new MyHashMap<SeaPort>();
MyHashMap=newmyhashmap();
并使用自定义setter和getter访问ArrayList我确实需要ArrayList,因为我希望一个键具有多个值。这是我为那个问题找到的最好的解决办法。有什么办法可以做到这一点吗?谢谢你的帮助。我会试试的。我用:MyHashMap()初始化了MyHashMap;我正试图用MyHashMap.add(b,port)添加到映射中;我得到了这个错误:非静态方法add(String,T)不能从静态上下文中引用,其中T是一个类型变量:T扩展了类MyHashMap中声明的东西----add是MyHashMap的一个类方法,所以必须在初始化的映射上调用它,即MyHashMap=new MyHashMap();map.add(“字符串”,obj);你能不能再看看这个问题?我已经添加了更多的新代码。我尝试打印时遇到另一个错误。再次感谢在另一个问题中,每个主题只有一个主题是很好的实践,以保持事物的整洁。如果你认为你的问题解决了,你应该接受我的回答,然后你可以打开另一个关于你的异常的话题,给出所有的细节,我或其他人会很乐意帮助你
package seaportprogram;
import java.util.ArrayList;
import java.util.Scanner;
class SeaPort extends Thing {
ArrayList<Dock> docks;
ArrayList<Ship> que;
ArrayList<Ship> ships;
ArrayList<Person> persons;
//Sea Port Scanner Constructor
public SeaPort(Scanner sc){
super(sc);
docks = new ArrayList<>();
que = new ArrayList<>();
ships = new ArrayList<>();
persons = new ArrayList<>();
}
//Set Docks
public void setDocks(ArrayList<Dock> docks){
this.docks = docks;
}
//Get Docks
public ArrayList<Dock> getDocks(){
return docks;
}
//Set Ships
public void setShips(ArrayList<Ship> ships){
this.ships = ships;
}
//Get Ships
public ArrayList<Ship> getShips(){
return ships;
}
//Set Que
public void setQue(ArrayList<Ship> que){
this.que = que;
}
//Get Que
public ArrayList<Ship> getQue(){
return que;
}
//Sea Port To String
public String toString(){
String string = "\n\n Sea Port: " + super.toString() + "\n";
for(Dock md: docks){
string += "\n" + md + "\n";
}
string += "\n\n --- List of all ships in Que: ";
for(Ship ms: que){
string += "\n > " + ms;
}
string += "\n\n --- List of all Ships:";
for(Ship ms: ships){
string += "\n > " + ms;
}
string += "\n\n --- List of all Persons:";
for(Person mp: persons){
string += "\n > " + mp;
}
return string;
}//End
}// End Sea Port Class
package seaportprogram;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class World extends Thing{
ArrayList<SeaPort> ports;
PortTime time;
//World Scanner Constructor
public World(Scanner sc){
super (sc);
ports = new ArrayList<>();
}
//Set Ports
}
public String toString(){
if(map.isEmpty())
{
System.out.println("The hashMap is empty");
return "empty";
}
String display=" ";
Iterator<String> itr = map.keySet().iterator();
while (itr.hasNext()) {
display =display + itr.next();
Iterator<ArrayList<T>> itr2 = map.values().iterator();
while (itr2.hasNext()) {
display +=itr2.next();
}
}
return display;
}
jta.setText(map.toString());
import java.util.ArrayList;
import java.util.HashMap;
public class MyHashMap<T extends Thing> {
private HashMap<String, ArrayList<T>> map;
public MyHashMap() {
map = new HashMap<>();
}
public void add(String s, T element) {
ArrayList<T> list = null;
if ((list = map.get(s)) == null)
map.put(s, list = new ArrayList<T>());
list.add(element);
}
public ArrayList<T> get(String s) {
return map.get(s);
}
}
MyHashMap<SeaPort> map = new MyHashMap<SeaPort>();