这似乎不起作用(编译器抱怨Something
的{{1}}方法没有实现getFoo()
),我无法弄清楚为什么或如何解决它....
HasFoo
我想要一个界面,我也希望能够做像
这样的事情enum FooKey { BLOB1, DONUT, ... }
interface HasFoo
{
public Object getFoo(FooKey k);
}
class Something implements HasFoo
{
private Map<FooKey, Object> map;
@SuppressWarnings("unchecked")
@Override
<T> T getFoo(FooKey k)
{
return (T)map.get(k);
}
/* other stuff deleted */
}
答案 0 :(得分:1)
这不行吗?
interface HasFoo
{
public <T> T getFoo(FooKey k);
}
答案 1 :(得分:1)
您不能使用通用方法覆盖非泛型方法。另一种选择可能是:
interface HasFoo
{
<T> T getFoo(FooKey k);
}
class Something implements HasFoo
{
private Map<FooKey, Object> map;
@Override
public <T> T getFoo(FooKey k)
{
return (T)map.get(k);
}
/* other stuff deleted */
}
答案 2 :(得分:0)
编译器的错误确实意味着方法的签名不同:
<T> T getFoo(FooKey k)
Object getFoo(FooKey k)
Althought Object是最终的祖先编译器,希望签名完全相同
答案 3 :(得分:0)
您的界面正在指定一个Object,而impl的返回类型是“任何”。您需要更改界面以返回T.
顺便说一下,你也可以声明你的地图是&lt; FooKey,T&gt;