检查通用/模板类型

时间:2012-02-03 17:30:31

标签: java c++

我正在尝试创建一个通用容器(例如下面的java代码),它有一些限制,例如大于某些限制的项目不能放入其中。问题是由于T是未知类型,因此具有整数的比较函数报告错误。如何解决这个问题?

其次,如果代码是用C ++编写的,是否有解决方案?

public class Box<T> {
    private T val;
    private int max;

    public Box (int m, T initval) { max = m; val = initval; }

    public T get() { return val; }
    public void set(T newval) {
        val = newval;
        if(newval.toInt() >= max)    // error on toInt
             System.out.printf("ERR: size too big\n");
        }
}

3 个答案:

答案 0 :(得分:3)

你应该

interface ToIntable {
  int toInt();
}

public class Box<T extends ToIntable> {
...
    if (newval.toInt() >= max) doSomething();
...
}

答案 1 :(得分:2)

有些对象根本没有toInt()方法。在您的情况下,您只能调用Object类中包含的方法(所有类都从该类继承)。

如果您确定将使用哪种类型的对象,您可以键入将其转换为所需类型并从中访问toInt()方法。但是,由于它是一个通用的容器,你无法控制它。

确保执行toInt()方法的另一种方法是使通用接受接口。您可以在接口内定义toInt(),并且您将能够将容器用于实现该接口的任何类。

正如我之前所说的那样,你只能访问Object类的方法。因此,简而言之,实现一个真正的通用容器,以你所描述的方式使用除Object之外的任何方法是不可能的

答案 2 :(得分:0)

您可以使用界面而不是使用泛型吗?在这种情况下,它可能只是一个标记接口,没有方法来表示可以在容器上使用的类型。