我的理解是,除非您定义实现该接口的匿名内部类,否则无法直接实例化接口。但令我惊讶和困惑的是,我看到一些似乎实例化接口的代码。 这是代码:
public final class SqlProviders
{
private static boolean installed_;
private static ThreadLocal<SqlAggregateProvider> fortaskInfo_
= new ThreadLocal<TaskInfoProvider>();
}
public interface TaskInfoProvider
{
int getTaskIndex();
int getTaskCount();
long getSessionId();
long getStatementId();
long getFunctionInstanceId();
boolean isTaskInfoAvailable();
void setTaskInfoAvailable(boolean available);
}
有人可以解释一下吗?
答案 0 :(得分:1)
代码未实例化TaskInfoProvider
接口。它使用接口作为类泛型类型参数来实例化泛型类ThreadLocal
....在此过程中没有创建TaskInfoProvider
的(假设的)实例....
显然,为了“设置本地线程的值”,您需要一个实现TaskInfoProvider
接口的类的实例。但这不是这段代码中发生的事情。