RooMeN, да, трудно. Перегрузка по типу возвращаемого значения (такое вообще где-нибудь реализовано? Динамическая типизация не считается) - это больно. Как ты вообще собираешься в таком случае их вызывать? В зависимости от контекста?
String foo = MyMegaMap.get("Bar")? А если будет такой код -
float foo = 42 + MyMegaMap.get("Bar")? Как результат ты ожидаешь?
Такое решается другим способом:
1. Бросаешь жаву и берёшься за языки с динамической типизацией (Python, PHP, JavaScript, etc.),
2. Делаешь обёртку для всех возвращаемых значений (либо реализуешь их от одного интерфейса, если это возможно):
public interface Value {
int asInteger();
float asFloat();
String asString();
}
public class Int32 implements Value { ... }
public class FP implements Value { ... }
public class Str implements Value { ... }
public class SomeStruct implements Value { ... }
...
private final Map<String, Value> map = new HashMap<>();
public Value get(final String name) {
return map.get(name);
}
3. Как-то пытаешься реализовать через generic'и.
__________________