我使用以下 @IntDef 声明:
@IntDef({ViewTypes.TYPE_RECIPE, ViewTypes.TYPE_CAMPAIGN, ViewTypes.TYPE_INFO})
@Retention(RetentionPolicy.SOURCE)
public @interface ViewTypes {
int TYPE_RECIPE = 0;
int TYPE_CAMPAIGN = 1;
int TYPE_INFO = 2;
}
这个方法根据位置返回其中一个int:
@ViewTypes
public int getType(int position) {
if (position < 3) {
return ViewTypes.TYPE_RECIPE;
} else if (position < 5) {
return ViewTypes.TYPE_CAMPAIGN;
} else {
return ViewTypes.TYPE_INFO;
}
}
我在交换机中使用该方法返回一些内容:
public View getView(int position) {
switch (getType(position)) {
case ViewTypes.TYPE_RECIPE:
return getRecipeView(position);
case ViewTypes.TYPE_CAMPAIGN:
return getCampaignView(position);
case ViewTypes.TYPE_INFO:
return getInfoView();
}
return null; // <-- unreachable
}
现在我假设当我“注意”所有可能的 ViewTypes 时,Annotation知道我不需要最后一行(“return null”)。事实上它是无法到达的,不是吗?如果我删除“return null”,我会收到错误“Missing return statement”。
编辑: 我只是发现我实际上可以回复,例如getType函数中的“5”,它将标记“5”,并带有红色错误消息“必须是......之一”。但该应用程序仍在构建。那么有没有办法将其转换为编译错误而不是“警告”?