如何将泛型类参数限制为某些类

时间:2014-02-17 09:48:56

标签: java generics

在我的通用类中,我需要将类型参数限制为Integer OR String。有没有办法实现这个目标?我不能使用T extends SomeClass来限制类型,因为普通父只是对象...

更新

public abstract class MyClass<T>{

    private T value;

    public T getValue(){
        return value;
    }
}

我希望value类型为StringInteger,我需要使用相同的方法来获取它(不是getIntValue() + getStringValue()

This似乎没有帮助...

2 个答案:

答案 0 :(得分:3)

如果我是你,我会重载两种方法:

public void withInteger(Integer param) { .. }

public void withString(String param) { .. }

请注意,我没有理由使用T extends String之类的内容,因为 StringInteger都是final且无法进行子类化

答案 1 :(得分:0)

让你的班级ctor私有,并通过工厂方法来创建实现;类型限制不限于MyClass,而是通过工厂。

class MyClass<T> {
  private T value;

  MyClass(T value) { this.value = value; }
  public T getValue() { return value; }
}

class MyClassFactory {
  public final static MyClass<Integer> createInteger(Integer i) {
    return new MyClass<Integer>(i);
  }
}