包含不同片段的HashMap(或ArrayList)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了包含不同片段的HashMap(或ArrayList)相关的知识,希望对你有一定的参考价值。

在某种情况下,我想制作一个HashMap,其中键是片段,值是整数。但是,每个不同的片段都有不同的类型,而不仅仅是Fragment类型。所以以下(这是我最初尝试过的)不起作用:

HashMap<Fragment, Integer> hmap = new HashMap<>();
hmap.put(new ExampleFragment(), 5);
hmap.put(new AnotherFragment(), 2);

现在这当然不会起作用,因为ExampleFragmentAnotherFragment不是正确的类型放在HashMap。 编辑:我在androidStudio中收到以下错误:Wrong 1st argument type. Found: 'com.example.sword.rpg.ExampleFragment', required: 'android.app.Fragment'

现在我的问题是:如何在同一个Fragment(或HashMap)中存储不同的ArrayList子类,这是否可能?

对于我的具体情况,我确实有一个解决方法,但它并不像这个那样整洁。所以我仍然很好奇。

编辑:我确实混淆了Fragmentandroid.support.v4.app.Fragment,谢谢:)

答案

对于你的问题,它应该可以工作,因为你可以混淆你的“片段”类型吗?在典型的android命名空间中有一些(例如android.app.Fragment vs android.support.v4.app.Fragment):

import android.app.Fragment;
import android.util.Log;
import java.util.HashMap;

public class TestHashMap {

      private HashMap<Fragment, Integer> test = new HashMap<>();

      public static class ExampleFragment extends Fragment {
          public ExampleFragment() { super(); }
          public String toString() { return "ExampleFragment[hash:"+hashCode()+"]"; }
          public void someOtherMethod() {}
      }

      public static class AnotherFragment extends Fragment {
          public AnotherFragment() { super(); }
          public String toString() { return "AnotherFragment[hash:"+hashCode()+"]"; }
      }

      public void test() {
          test.put(new ExampleFragment(),1);
          test.put(new AnotherFragment(),2);
          Log.d("TestHashMap","size = "+test.size());
          Log.d("TestHashMap",test.toString());
      }
  }

哪个产生:

D/TestHashMap: size = 2
D/TestHashMap: {AnotherFragment[hash:230309272]=2, ExampleFragment[hash:5536635]=1}

以上是关于包含不同片段的HashMap(或ArrayList)的主要内容,如果未能解决你的问题,请参考以下文章

ArrayList 和 HashMap 的默认大小是多数?

Java中请说明集合类ArrayList与 HashMap的区别?

何时在 LinkedList 或 ArrayList 上使用 HashMap,反之亦然

HashMap的ArrayList或LinkedHashMap的按索引获取项目

对与 hashmap 连接的模型的 ArrayList 进行排序

ArrayList与HashMap的用法