具有generics参数基础的Javagenerics参数
我想知道在Java中是否有一个优雅的解决方案(除了显而易见的一个 – 声明一个不同的/显式函数。这是代码:
private static HashMap nameStringIndexMap = new HashMap(); private static HashMap nameBufferIndexMap = new HashMap(); // and a function private static String newName(Object object, HashMap nameIndexMap){ .... }
问题是我无法将nameStringIndexMap或nameBufferIndexMap参数传递给函数。 除了做另一个明确需要HashMap 或HashMap 参数的函数之外,我不知道更优雅的解决方案。
我的问题是:这可以用更优雅的解决方案/使用generics或类似的东西来制作吗?
谢谢,
尤利安
你也可以使你的function通用:
private static String newName(E object, HashMap nameIndexMap){ .... }
这将函数的两个参数HashMap
在一起,因此对于HashMap
您只能将String
实例作为第一个参数传递。 这可能是您想要的也可能不是:如果您只想从地图中获取元素,Jon的解决方案更简单,但如果您想将此对象添加到地图中,则此选项是唯一的选择。
你想要这样的东西:
private static String newName(Object object, HashMap extends Object, Integer> nameIndexMap) { .... }
或(如评论中所指出)
private static String newName(Object object, HashMap, Integer> nameIndexMap) { .... }
这将阻止你将任何东西放入地图,因为你不能保证得到正确的键 – 但是你可以从地图中取出东西并保证它们是整数。
请注意,此版本不会使该方法通用 – 这意味着它更简单,但它不提供与Peter的版本相同的类型安全性,因为您无法保证该object
的类型正确。 每种方法都有其优点和缺点 – 根据方法的主体使用最合适的方法。 (如果你需要在地图中输入一个条目,彼得的方法肯定会更好。)