【问题标题】:Pass An ArrayList<CustomObject> to a function that accepts as parameter an ArrayList<Object> in Java将 ArrayList<CustomObject> 传递给在 Java 中接受 ArrayList<Object> 作为参数的函数
【发布时间】:2012-04-22 11:44:27
【问题描述】:

我正在编写一个通用 java-android 函数,该函数将接受 ArrayList&lt;Object&gt; 作为其参数之一,因此无论 ArrayList 元素的类型如何,我都可以在整个应用程序中使用它。

这是我的功能:

public GenericDisplayAdapter(Activity activity, ArrayList<Object> arrData) {

    this.m_ArrData = arrData;
    inflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

当我尝试将 ArrayList&lt;CustomObject&gt; 作为参数传递给此函数时,我收到错误“无法从 ArrayList&lt;CustomObject&gt; 转换为 ArrayList&lt;Object&gt;”,

        m_LVStructDamageHeader.setAdapter(new GenericDisplayAdapter(
            (Activity)this, (ArrayList<Object>)arrStructDamageHeaders));

处理这种情况的最佳方法是什么,谢谢

【问题讨论】:

    标签: java android generics arraylist


    【解决方案1】:

    改变你的功能

    public GenericDisplayAdapter(Activity activity, ArrayList<Object> arrData)
    

    public GenericDisplayAdapter(Activity activity, ArrayList<?> arrData)
    

    然后您将能够通过ArrayList&lt;T&gt; 为任何TArrayList&lt;?&gt; 几乎就像 ArrayList&lt;Object&gt;,但不同之处在于,虽然您可以将 ANY 对象添加到 ArrayList&lt;Object&gt; 中(如果您在那里传递例如 ArrayList&lt;CustomObject&gt;,这非常糟糕),但您不能在ArrayList&lt;?&gt; 中添加任何内容(这很好)。

    【讨论】:

    • "不能添加任何东西..." 除了null
    【解决方案2】:

    改变方法参数

    ArrayList<Object> to ArrayList<? extends Object>
    

    【讨论】:

      【解决方案3】:

      你应该像通用 ArrayList 一样

      public GenericDisplayAdapter(Activity activity, ArrayList<?> arrData) {
      
          this.m_ArrData = arrData;
          inflater = (LayoutInflater) activity
                  .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      }
      

      【讨论】:

        【解决方案4】:

        还要考虑,给 GenericDisplayAdapter 类一个类型参数可能是合适的。例如

        class GenericDisplayAdapter<T> {
            private List<T> m_ArrData;
        
            public GenericDisplayAdapter(Activity activity, ArrayList<T> arrData) {
                ...
            }
        }
        

        那么那么其他的方法就可以利用这个类型参数了,不用处理Object,就可以使用T了。

        【讨论】:

          猜你喜欢
          • 2021-07-22
          • 2014-05-04
          • 2012-11-10
          • 1970-01-01
          • 1970-01-01
          • 2014-12-27
          • 2018-06-23
          • 1970-01-01
          • 2013-04-02
          相关资源
          最近更新 更多