2017-07-21 64 views
0

我得到一個未經檢查的投射警告,儘管查看了許多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; 
    } 
} 
+0

我試過: 片段片段= fm.findFragmentByTag(標籤); if(片段instanceof RetainedFragment){ RetainedFragment retainFragment =(RetainedFragment )fragment; } 但它仍然給出相同的警告。 –

+0

[什麼是Java中的SuppressWarnings(「unchecked」)?](https://stackoverflow.com/q/1129795/823393) - 但只有在您確定的情況下。 – OldCurmudgeon

回答

1

這涉及到究竟如何在Java中實現泛型。簡短的故事是,在運行時無法知道是否您的RetainedFragment實際上是RetainedFragment<T>。換句話說,系統知道這是一個RetainedFragment,但它不知道T data是你想要的類型。

你可以在這裏閱讀更多:https://docs.oracle.com/javase/tutorial/java/generics/genTypes.html