我正在尝试创建一个通用容器(例如下面的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");
}
}
答案 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)
您可以使用界面而不是使用泛型吗?在这种情况下,它可能只是一个标记接口,没有方法来表示可以在容器上使用的类型。