检查泛型/模板类型

checks on generic/template type

本文关键字:类型 泛型 检查      更新时间:2023-10-16

我正在尝试创建一个通用容器(例如下面的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 bign");
        }
}

您应该有

interface ToIntable {
  int toInt();
}

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

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

如果你确定什么类型的对象将与它一起使用,你可以将它类型转换为你想要的类型,并从中访问toInt()方法。然而,由于它是一个通用容器,您将无法控制它。

确保要执行toInt()方法的另一种方法是使泛型接受接口。您可以在接口内部定义toInt(),并且可以将容器与实现该接口的任何类一起使用。

正如我前面所说,按照您的操作方式,您只能访问Object类的方法。因此,简而言之,实现一个真正通用的容器,以您所描述的方式使用Object方法以外的任何东西是不可能的

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