好的,我说有一节课:
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的实例?
答案 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
的子类,正如您所期望的那样。您无需在构造函数中执行任何其他操作。