检查Argument是否是指定泛型类型的instanceof

时间:2013-11-20 23:47:25

标签: java generics parameters

好的,我说有一节课:

public class Example<E extends Something> {

public Something s;
public E e;

public Example(E e, Something s) {
    this.e = e;
    this.s = s;
}

}

在另一堂课中我有:

public Something a = new ExtendsSomething();
public Something b = new AlsoExtendsSomething();
//Assume I have many more classes that also extend Something, so I cannot do instanceof
//for each class
public Example<ExtendsSomething> example1 = new Example<ExtendsSomething>(a);
public Example<ExtendsSomething> example2 = new Example<ExtendsSomething>(b);

我会在构造函数中编写什么代码来在第二个类的第6行抛出错误,因为b不是ExtendsSomething的实例?

2 个答案:

答案 0 :(得分:1)

这个问题的标题就是答案。

if(b instanceof ExtendsString)
{
    public Example<ExtendsString> example2 = new Example<ExtendsString>(b);
}
else
{
    //handle your error case
}

如果抛出错误,也许你必须投射b

if(b instanceof ExtendsString)
{
    public Example<ExtendsString> example2 = new Example<ExtendsString>((ExtendsString)b);
}
else
{
    //handle your error case
}

答案 1 :(得分:0)

编译器将拒绝编译您的示例程序,因为Example的构造函数有两个参数。如果删除s参数,则编译器将拒绝该程序,因为b不是ExtendsSomething的子类,正如您所期望的那样。您无需在构造函数中执行任何其他操作。