java - 如何限制 Java 泛型类型中允许类型的数量

标签 java generics

比如说,我有一个如下的泛型

public class GenericType<T> {
   private T someVar;

   public void setVar(T var) { this.someVar = var; }

   //Rest of the code
}

我想让它只接受特定类型(String/Integer/Double)。我知道有界通配符,但它们对我没有帮助。在 setVar() 中,我可以检查 instanceof 并在类型不是 Integer/String 等时抛出异常。这是最好的方法吗?

我在对这种类型进行操作时遇到了同样的问题。根据类型,我想做不同的操作。继承和有界通配符似乎是解决此类问题的一般方法,但这些都是原始包装器。

最佳答案

使用继承:

Parent.java

public abstract class Parent<T> {
    public abstract void display(T t);
}

ChildString.java

public class ChildString extends Parent<String> {

    @Override
    public void display(String t) {
        // Do something here...
    }

}

ChildInteger.java

public class ChildInteger extends Parent<Integer> {

    @Override
    public void display(Integer t) {
        // Do something here...
    }

}

ChildDouble.java

public class ChildDouble extends Parent<Double> {

    @Override
    public void display(Double t) {
        // Do something here...
    }

}

访问子类而不是直接访问父类。

更新

再举个例子:

GenericType.java

public class GenericType {

    public void display(Object t) {
        String msg;
        if(t instanceof String) {
            msg = "String";
        } else if (t instanceof Integer) {
            msg = "Integer";
        } else if (t instanceof Double) {
            msg = "Double";
        } else {
            msg = "Another Object";
        }

        System.out.println(msg);
    }
}

SpecificGeneric.java

public class SpecificGeneric {

    public static void main(String[] args) {
        GenericType basicType = new GenericType();

        basicType.display(new String());
        basicType.display(new Integer(1));
        basicType.display(new Double(0.1));
    }
}

关于java - 如何限制 Java 泛型类型中允许类型的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10444656/

相关文章:

Java泛型类和通配符

Java泛型方法,通配符List返回类型

c# - 如何在具有值类型约束的泛型声明类型之间进行复制

java - 根据多个键对 map 列表进行排序

java - JPanel 被传递为 null

java - JUnit 空指针异常

c# - 通用方法已声明相同的签名

java generics - "extends"关键字 -> 不支持添加元素

java - List.addAll() 什么时候抛出 IllegalStateException?

java - 如何在 jComboBox 中选择项目