Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取父子类java的不兼容错误_Java_Inheritance_Casting - Fatal编程技术网

获取父子类java的不兼容错误

获取父子类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:

        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>();