【问题标题】:How to create constructor for Hashmap<String Boolean> in a factory method?如何在工厂方法中为 Hashmap<String Boolean> 创建构造函数?
【发布时间】:2018-12-19 17:54:49
【问题描述】:

我正在为公共类中的 Hashmap 创建工厂方法。

 public class MyList {
    Hashmap list = newMap();   //is this function called properly here?

public static final Hashmap newMap() {
    return Hashmap(String, boolean);

  }
 }

以最简单的方式,如果工厂方法要为键/值对保存字符串和布尔值,我该如何设置?

我被语法困住了。

我只想返回一个新的 Hashmap 对象并使用 newMap() 作为工厂方法

【问题讨论】:

  • 为什么要使用工厂方法?这比创建对象更容易吗?
  • 什么是Hashmap?那是你自己的课吗?为什么你的 hashmap 可以分配给 MyList 类型?
  • Hashmap是Java.util.Hashmap下的map类型列表;我只是想创建更简洁的代码,只调用类中的方法。

标签: java hashmap factory


【解决方案1】:
  1. HashMap 有 key 和 value 的泛型类型,所以你需要将这些类型指定为

    public static HashMap<String, Boolean> newMap() {
        // ...
    }
    
  2. 在内部,您将创建地图为

    • return new HashMap&lt;String, Boolean&gt;();
    • 或者就像return new HashMap&lt;&gt;();使用菱形运算符(因为类型已经在签名中
  3. 你也可以将类型作为参数传递

    public static <K, V> HashMap<K, V> newMap(Class<K> classKey, Class<V> classValue) {
        return new HashMap<>();
    }
    

使用

public static void main(String[] args) {
    Map<String, Boolean> map = newMap();
    Map<Integer, Double> mapID = newMap(Integer.class, Double.class);
}

【讨论】:

  • 函数调用是否设置为 > myList list = newMap(String, boolean);
  • @CodeNewb 不确定是否理解您的问题?请在那里编辑您的问题并澄清
  • 为 Hashmap 对象命名我调用函数的地方,语法是否正确? MyList list = newMap();
  • @CodeNewb 对不起,我不明白你想要什么,MyList 是你的类,HashMap 是一个java类,它们之间根本没有联系,我不明白“给个名字”是什么意思
  • 如果创建工厂方法,则必须调用类中的方法。当你创建一个新的 Hashmap 对象时,你必须给它一个名字。调用工厂方法时,必须给返回的hashmap对象一个对象名
【解决方案2】:

要获得一个将 T 和 U 作为 Class 类型的通用工厂方法,您可以继续使用

public static <T,U> HashMap<T,U> factoryHashMap(T t , U u ){
         HashMap<T,U> tuHashMap = new HashMap<T,U>();
         // do stuff
        return tuHashMap;
    } 

这里 T t, Uu 是可选参数。你也可以有空参数。

如果你在函数中观察返回类型HashMap&lt;T,U&gt;之前,我们已经把&lt;T,U&gt;表示这是一个泛型方法

这里 T 和 U 可以是任何有效的类类型。在您的情况下,它是字符串和布尔值

new HashMap&lt;T,U&gt; 是根据您的工厂方法要求创建和更新的实例。

例如。在下面的示例中,我们只是将tu 添加到地图中,如果它们不为空,则返回一个空的HashMap

public static <T, U> HashMap<T, U> factoryHashMap(T t, U u) {
    HashMap<T, U> tuHashMap = new HashMap<T, U>();
    if (t != null && u != null)
        tuHashMap.put(t, u);
    return tuHashMap;
}

驱动方法:

public static void main(String args[] ) throws Exception {
        HashMap<String, Boolean> myMap = factoryHashMap("isItCool?",false);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-04
    • 2014-02-18
    • 1970-01-01
    • 2020-08-16
    • 2011-04-07
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多