返回语句应该在Java中使用泛型吗?

Sal*_*Sal 3 java oop generics

我有一个关于在编码中使用"最佳实践"的基本问题.(我正在使用Java,但问题对于OOP来说是一般性的.)当为一个打算长期使用的类编写方法时,是否最好留下返回对象有或没有泛型?

在我的情况下具体来说,我正在Map<String, Integer>使用该方法返回一个.我应该在return语句中指定它,还是应该只返回一个Map

Str*_*ior 9

最好尽可能使用泛型.它将有助于避免运行时异常,并且它不会强迫使用您的代码的人进行一堆丑陋的类型转换.例如,如果您使用以下签名:

Map<String, Integer> getMap();
Run Code Online (Sandbox Code Playgroud)

...然后消费代码可能如下所示:

Map<String, Integer> map = getMap();
Integer val = map.get(key);
Run Code Online (Sandbox Code Playgroud)

...但是如果你使用这样的签名:

Map getMap();
Run Code Online (Sandbox Code Playgroud)

...消费代码可能如下所示:

Map<String, Integer> map = (Map<String, Integer)getMap();
Integer val = map.get(key);
Run Code Online (Sandbox Code Playgroud)

通过使用泛型,不仅可以保存该转换(Map<String, Integer>),但是如果您更改getMap为实际返回a Map<String, Object>,您将收到编译时错误(很容易捕获和修复),而不是在您执行时获取异常调用map.get(key)并且JRE尝试将一些随机Object自动转换为Integer.