简体   繁体   English

使用 groovy 语法定义的 HashMap 不适用于字符键

[英]HashMap defined using groovy syntax not working with Character Keys

Does groovy not have matured support for generics? groovy 是否没有对 generics 的成熟支持? If I am explicitly saying I want a Map<Character, Character> will it not respect it?如果我明确说我想要一个 Map<Character, Character> 会不会尊重它?

The below code fails because map.get(Character) is giving me null.下面的代码失败,因为 map.get(Character) 给了我 null。 When I use Map<String, String> it works.当我使用 Map<String, String> 时,它可以工作。

String eq = "{([])}"
Map<Character, Character> map =   [ '}':'{', ')': '(', ']': '[' ]
Stack<Character> stack = new Stack();
Character[] arr = eq.toCharArray();
for (int i = 0 ; i < arr.length; i++) {
    Character c = arr[i]
    if (stack.isEmpty()) {
        stack.push(c)
    } else { // check for the end
        char c1 = stack.peek()
        **// map.get(c) is null here**
        if (c1 == map.get(c)){ 
            stack.pop()
        } else {
            stack.push(c)
        }
    }
}

if (stack.isEmpty()) {
    println "Balanced Eq"
} else {
    println "Not Balanced Eq"
}

Groovy uses ' for string literals and not for chars (like Java). Groovy 使用'表示字符串文字而不是字符(如 Java)。 " -literals allow ${} replacements, ' -literals don't. " -literals 允许${}替换, ' -literals 不允许。

If you want those error catched, you most likely want to add TypeChecked or CompileStatic as compiler option or as annotations on the places, that depend on it.如果您希望捕获这些错误,您很可能希望添加TypeCheckedCompileStatic作为编译器选项或作为依赖于它的位置的注释。 The default, "dynamic" Groovy does not care much for generics.默认的“动态”Groovy 不太关心 generics。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM