Java方法参数泛型类型
我有一门课:Java方法参数泛型类型,java,generics,Java,Generics,我有一门课: public abstract class BindingFragment<T extends ViewDataBinding> extends Fragment { @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); T bind
public abstract class BindingFragment<T extends ViewDataBinding> extends Fragment {
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
T binding = DataBindingUtil.bind(view);
onViewBind(binding);
onViewBind(createViewBind(view));
onViewBind((T)DataBindingUtil.bind(view));
onViewBind(DataBindingUtil.bind(view)); //this line compile error
}`
public abstract void onViewBind(T binding);
private T createViewBind(View view){
return DataBindingUtil.bind(view);
}
}
公共抽象类BindingFragment扩展了片段{
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
super.onViewCreated(视图,savedInstanceState);
T binding=DataBindingUtil.bind(视图);
onViewBind(绑定);
onViewBind(createViewBind(view));
onViewBind((T)DataBindingUtil.bind(view));
onViewBind(DataBindingUtil.bind(view));//此行编译错误
}`
公开摘要无效onViewBind(T-binding);
私有T createViewBind(视图){
返回DataBindingUtil.bind(视图);
}
}
方法DataBindingUtil.bind(视图)
签名如下:
公共静态T绑定(视图根)
我在BindingFragment类中测试了调用onViewBind(T binding)
的一些方法,但是onViewBind(DataBindingUtil.bind(view))
上面的那行无法通过。有人能告诉我为什么吗?有问题的那行
onViewBind(DataBindingUtil.bind(view)); //this line compile error
在Java1.8中编译,但不在Java1.7中编译(在Eclipse中测试时)。
目前,Java泛型类型的编译器处理是一个移动的目标
在Java1.7中,您可以使用
onViewBind(DataBindingUtil.<T>bind(view));
onViewBind(DataBindingUtil.bind(view));
为了避免强制转换。您必须在onViewBind(databindingtul.bind(view))上显式地提供T强制转换//此行编译错误 因为在下面的方法中,你们接受的参数是T
public abstract void onViewBind(T binding);
如果使用下面的方法,则不需要提供任何显式转换
public abstract void onViewBind(ViewDataBinding binding);
如果您已经编写了“代码> DavaDuffItudio类,那么您应该考虑更改Bin()方法的返回类型。如果只有返回类型是泛型的,那么使用泛型就没有意义。您是如何在
bind()
方法中创建返回对象的?奇怪的是,它对我来说编译得很好。你能分享一下编译器的错误吗?另外,@Codebender是正确的,您不希望在不将其类作为参数传递的情况下从方法返回泛型。严格的类型和泛型机制旨在防止编译时出错,而不是在运行时引入错误。@Codebender非常感谢。类DataBindingUtil
来自android数据绑定库。@Aivan也谢谢。我使用Android Studio作为我的Android IDE。当我在上面写的时候,IDE在这行下面给了我一个编译错误。也许IDE可以做到。非常感谢,我知道了。非常感谢,我知道了。