Search code examples
javatreemap

Why do I get an error when entering child classes to a TreeMap defined for their parent?


In my program I have an abstract class TelephoneEntry which holds a TelephoneNumber(it implements Comparable) and an addres, then I have child classes Person and Company that extend the TelephoneEntry class.

abstract class TelephoneEntry {
    protected TelephoneNumber number;
    protected String address;

    public abstract void description();

    public TelephoneNumber getNumber() {
        return number;
    }

    public void setNumber(TelephoneNumber number) {
        this.number = number;
    }
}

class Person extends TelephoneEntry {
    protected String name;
    protected String surname;

    public Person(String name, String surname, String address, int code, long number) {
        this.name = name;
        this.surname = surname;
        this.address = address;
        this.number = new TelephoneNumber(code, number);
    }

    @Override
    public void description() {
        System.out.println("Name: " + name);
        System.out.println("Surname: " + surname);
        System.out.println("Address: " + address);
        System.out.println("TelephoneNumber: " + number.toString());
        }
    }

class Company extends TelephoneEntry {
    protected String name;

    public Company(String name, String address, int code, long number) {
        this.name = name;
        this.address = address;
        this.number = new TelephoneNumber(code, number);
    }

    @Override
    public void description() {
        System.out.println("Name: " + name);
        System.out.println("Address: " + address);
        System.out.println("TelephoneNumber: " + number.toString());
    }
}

public class TelephoneNumber implements Comparable<TelephoneNumber> {
    private int countryCode;
    private long localNumber;

    public TelephoneNumber(int code, long number) {
        countryCode = code;
        localNumber = number;
    }


    @Override
    public int compareTo(TelephoneNumber otherNumber) {
        if (Integer.compare(getCountryCode(), otherNumber.getCountryCode()) != 0) {
        return Long.compare(getLocalNumber(), otherNumber.getLocalNumber());
    } else
        return Integer.compare(getCountryCode(), otherNumber.getCountryCode());

    }

    public String toString() {
        String out = "";
        out += ("+" + countryCode + " " + localNumber);
        return out;
    }
}

But when I try passing them to a tree map defined as

TreeMap<TelephoneNumber,  TelephoneEntry> map = new TreeMap<>();

I get an error stating that:

"The method add(TelephoneNumber, Person) is undefined for the type TreeMap<TelephoneNumber,TelephoneEntry>"
"The method add(TelephoneNumber, Company) is undefined for the type TreeMap<TelephoneNumber,TelephoneEntry>"

I'm not sure what may the cause of this error be as they both inherit the used key from TelephoneEntity.


Solution

  • Maps have put() method, not an add() method, for adding entries.

    Change your code to:

    myMap.put(myTelephoneNumber, myTelephoneEntry);