具有通用键类型的 TreeMap

TreeMap with generic key types

我正在使用 TreeMap 添加 <Integer,Long> 类型的条目。但是,我可能会遇到条目类型为 <Long, Long> 的情况,我想构建一个可以处理这两种情况的 TreeMap。到目前为止,我有

public class myClass {
    public TreeMap<Integer, String> myClass(String fileToRead) {
        ....
        TreeMap<Integer, String> map = new TreeMap<>();    
        map.put(Integer, String); //this is a for loop that iterates through input list
    }
    return map
} 

如何添加可以是 Integer 或 Long 的通用密钥 K?

编辑:我想包括其他类型,例如 BigInteger

您始终可以使用 instanceof 运算符检查 ReferenceType 并相应地工作:

if (obj instanceof Long) { ... }
if (obj instanceof Integer) { ... }

来自JLS

RelationalExpression instanceof ReferenceType

At run time, the result of the instanceof operator is true if the value of the RelationalExpression is not null and the reference could be cast (§15.16) to the ReferenceType without raising a ClassCastException. Otherwise the result is false.

两者的超类型都是 Number,所以你可以使用这个

听起来你可能想要这样的东西

public class MyClass<T extends Number> {
  public TreeMap<T, String> myClass(String fileToRead) {
  ...
}

BigInteger 也会填满 Number 账单。

但为了避免泛型的复杂化,我实际上建议始终使用 Long 作为键类型,甚至 BigInteger,除非您有强烈的要求不要这样做。根据您使用的 JVM(64 位),Integer 对象使用的 space 甚至可能不会少于 Long 对象。