【发布时间】:2014-01-09 19:06:36
【问题描述】:
我写了一个泛型抽象类TestSuper,值得注意的是它有一个方法“execute”,参数为Callable,Callable的泛型类型是T,而T与V无关。 这是代码:
//my abstract class
public abstract class TestSuper<V>
{
public abstract void callExecute(V value);
public <T> T execute(Callable<T> callable)
{
T call = null;
try
{
call = callable.call();
}
catch (Exception e)
{
e.printStackTrace();
}
return call;
}
}
然后我这样写子类:
//the sub class that not specify the generic type from TestSuper
public class TestSub extends TestSuper
{
@Override
public void callExecute(Object value)
{
Boolean result = execute(new Callable<Boolean>()
{
@Override
public Boolean call() throws Exception
{
return Boolean.TRUE;
}
});
}
}
我对变量“结果”的类型感到困惑,因为此代码带有编译时错误。 像这样:
java: incompatible types
required: java.lang.Boolean
found: java.lang.Object
如果我将“布尔结果”替换为“对象结果”,错误就会消失。
如果我在定义TestSub时指定了泛型,也没有错误。
public class TestSub extends TestSuper<Object>
{
@Override
public void callExecute(Object value)
{
Boolean result = execute(new Callable<Boolean>()
{
@Override
public Boolean call() throws Exception
{
return Boolean.TRUE;
}
});
}
}
在这种情况下如何解释泛型类型?
【问题讨论】: