java - 使用泛型的 Hashmap getter setter

标签 java generics

我有以下两个类(class)

动物类

class Animal {

  Map<String, A> data = new HashMap <String, A>();

  public void setValue(HashMap<String, ?> val)
   {
     this.data = val;
   }
  public Map getValue()
   {
    return this.data;
   }
}

狗类

class Dog extends Animal {

  public void index()
  { 
    Map<String, A> map = new HashMap<String, A>();

    map.put("name", "Tommy");
    map.put("favfood", "milk"); // want to pass Lists, Integers also
    setValue(map);
  }
}

正如您从上面的代码中看到的,我正在尝试使用 index 方法中的键设置一些值,但是我在两个文件中都收到来自 eclipse 的错误警告。错误消息是:

在狗类文件中:

Multiple markers at this line
    - A cannot be resolved 
     to a type
    - A cannot be resolved 
     to a type

在动物类文件中:

Multiple markers at this line
    - A cannot be resolved to a type
    - A cannot be resolved to a type
    - Incorrect number of arguments for type Map<K,V>; it cannot be parameterized with arguments 
     <HashMap<String,A>>

HashMap 中键的数据类型始终是字符串,但值的数据类型是随机的,因此我尝试使用泛型。

来自 PHP 背景的我仍然无法掌握 Java 泛型的概念。你能告诉我我的代码哪里有错误吗?

最佳答案

虽然这种设置不是理想的方法,但一种解决方案是将您的 map 设为 <String, Object>通用类型。这样你就可以把你想要的任何东西放入Object部分。然而,将这些信息撤回会很痛苦。这就是我对你们类(class)变化的看法。

class Animal {

      Map<String, Object> data = new HashMap <String, Object>();

      public void setValue(Map<String, Object> map)
       {
         this.data = map;
       }
      public Map<String, Object> getValue()
       {
        return this.data;
       }
    }

class Dog extends Animal {

      public void index()
      { 
        Map<String, Object> map = new HashMap<String, Object>();

        map.put("name", "Tommy");
        map.put("favfood", "milk"); // want to pass Lists, Integers also
        setValue(map);
      }
    }

关于java - 使用泛型的 Hashmap getter setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26306147/

相关文章:

java - 如何使用 intellij 10.5.1 中的选项运行 junit + maven (clean install -Dtest=ClassName)

c# - 当 T 可以是多个 new () 类型时,如何泛化一个方法?

ios - 在 Array 扩展中的泛型函数中使用 append

java - 如何将 "Type type = new TypeToken<List<Mybean>>(){}.getType()"中的Mybean更改为参数?

java - 在 if 条件中声明变量且没有大括号时出现编译器错误

Java 返回数组与按引用传递

java - jodatime DateTime 对象和 Locale

Java:为什么线程不会终止

c# - 使用不同的泛型参数初始化泛型集合数组

Java - 您可以从父类(super class)访问子类中声明的枚举吗?