我最近正在研究一些Android代码(这应该是一个通用的Java问题 - 请原谅双关语 - 关于泛型和Java自动解析类型)。
这是我的代码(基于Android,但如果需要,请创建一个特定于Java的版本)
class ViewFinder<T extends View> {
@SuppressWarnings("unchecked")
final static <T> T byId(View view, int resource) {
return (T) view.findViewById(resource);
}
}
这是有趣的一点......
// Convert XML UI component definitions into the static View Holder object
// Here is what we normally have to do for Android to convert the XML into a UI component
holder.txtGroupName = (TextView) row.findViewById(R.id.txtGroupName);
// This is what I can do with my ViewFinder class above!
holder.txtGroupName = ViewFinder.byId(row, R.id.txtGroupName);
// This is what I was EXPECTING to do with my ViewFinder class above!
holder.txtGroupName = ViewFinder<TextView>.byId(row, R.id.txtGroupName);
我不知道Java(不是Android)将Generic T类型解析为TextView UI组件,但为什么和* 如何 * ?
我可以通过“播放”来了解这里发生的事情吗?我希望能够在下次编写代码之前弄清楚是否会发生这种情况。
答案 0 :(得分:1)
我的猜测是您正在运行Java 7,请查看:http://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html
剖析正在发生的事情:Java编译器的部分任务是
List<String> str = new ArrayList<>()
,已翻译为List<String> str = new ArrayList<String>()
。希望这是有道理的