According to Should interface names begin with an "I" prefix?, I should not add prefix "I" to interfaces. However, I think prefix "I" in interface may be useful sometimes. For example, if the interface have totally different names with the implementation naturally, eg: "Fruit", "Apple","Orange", then I agree it doesn't need to have prefix. But sometimes, it is unavoidable to have a interface having similar name to the implementation, for example, in a game : Tool:
public interface Tool{
}
public class ConsumableTool implements Tool{
}
public class NonConsumableTool implements Tool{
}
I found it would be harder to find the codes that use "Tool" only instead of "ConsumableTool" (eg: search "Tool " to find the places that use Tool as parameter and something like :Tool t=...), because when searching the keyword "Tool", both the place that uses "Tool" and "ConsumableTool" would be listed, which sometimes I may just interested in finding "Tool" only. So I think
public interface ITool{
}
may help me to find the interface among the ".java" easier when I want to find which places use the interface only("ITool") instead of the implementation.
Also when feel tried after reading many lines of codes for fixing bugs, I may yo-yo to "Tool" (move into the Tool.java to view the code) to find implementation to fix bugs wrongly because of forgetting "Tool" is an interface only. Yo-yo to wrong place may be not a big problem, but adding prefix "I" may reminds me "implementations are not at here", reducing the chance of "yo-yo" to the interface accidentally, hence saving me a lot of time.
Code is usually being read more than modified, right? While whether knowing it is interface may be redundant to "Users", it helps developers to read and understand the code faster.
So my question is, are the reasons above rationale to add prefix "I" on interfaces?