Home > other >  How to merge methods with unrelated parameter types into one generic one?
How to merge methods with unrelated parameter types into one generic one?

Time:09-27

For java/C#

There is my code:

class Room{
  HashSet tables;
  HashSet cups;

  void AddTable(Table table){ tables.Add(table); }
  void AddCup(Cup cup){ cups.Add(cup); }
  Table GetTable(){...}
  Cup GetCup(){...}
  ...
}

Can I merge AddTable and AddCup into one method like Add<T>

like this:

        void Add<T>(T t)
        {
            if (t is Table table) { ... }
            else if (t is Ground ground) { ... }
            ...
        }

        T Get<T>(){
            ...
        }

The problem is that there are too many if else.

Do you have any better suggestions?

CodePudding user response:

Name the methods the same so that they will be overloads of each other:

  void Add(Table table){ tables.Add(table); }
  void Add(Cup cup){ cups.Add(cup); }

The compiler is smart enough to call the correct method. (And Table and Cup are unrelated classes, so there are no caveats).

  • Related