我收到了一个未经检查的强制转换警告,尽管我看了很多StackOverflow帖子,但似乎无法解决这个问题。什么是正确的,安全的方式来制作这个演员?提前感谢:-)
/**
* Fragment for retaining data across screen orientation changes
*/
public class RetainedFragment<T> extends Fragment {
public T data;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
public static <T> RetainedFragment<T> findOrCreate(FragmentManager fm, String tag) {
// THIS LINE I GET AN UNCHECKED CAST WARNING
RetainedFragment<T> retainFragment = (RetainedFragment<T>) fm.findFragmentByTag(tag);
if(retainFragment == null){
retainFragment = new RetainedFragment<>();
fm.beginTransaction()
.add(retainFragment, tag)
.commitAllowingStateLoss();
}
return retainFragment;
}
}发布于 2017-07-21 23:58:56
这归结于泛型是如何在Java中实现的。简而言之,无法在运行时知道您的RetainedFragment是否实际上是一个RetainedFragment<T>。换句话说,系统知道它是一个RetainedFragment,但它不能知道T data是您想要的类型。
你可以在这里阅读更多内容:https://docs.oracle.com/javase/tutorial/java/generics/genTypes.html
https://stackoverflow.com/questions/45241930
复制相似问题