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可以做到。非常感谢,我知道了。非常感谢,我知道了。