// interface
public interface Callback<T, R> {
R execute(T arg);
}
// application code
logger = MetricLogger.getInstance(app);
logger.write(new Callback<LogFormat, Void>() {
@Override
public Void execute(LogFormat arg) {
// do something
return null;
}
});
当我返回Void
类型时,上面的代码会编译并运行。
但我不能使用Long
作为返回类型。例如
logger = MetricLogger.getInstance(app);
// doesn't compile
logger.write(new Callback<LogFormat, Long>() {
@Override
public Long execute(LogFormat arg) {
return null;
}
});
错误消息是,
错误:(66,22)错误:不兼容的类型:匿名
Callback <LogFormat,Long>
无法转换为Callback<LogFormat,Void>
Java 6不支持通用返回类型?
或者我错过了什么?
=============================================== ==================
更新
我发现这些代码编译。但我无法确定哪一个是正确的
// Solution 1
public interface Callback<T> {
<R> R execute(T arg)
}
new Callback<LogFormat>() {
@Override
public Long execute(LogFormat arg) { ... }
}
// Solution 2
public interface Callback {
<T, R> R execute(T arg)
}
new Callback<LogFormat>() {
@Override
public <LogFormat, Long> Long execute(LogFormat arg) { ... }
}
答案 0 :(得分:0)
Logger类的write方法可能有以下签名:
void write(Callback<? extends Object, Void> callback)
,除了Void类型
如果它是您的记录器类实现,您可以更改签名,它应该是类似的
void write(Callback<? extends Object, ? extends Object> callback)
允许您使用任何类型