Заводской шаблон Groovy class выдает странную ошибку

#groovy #jenkins-groovy

#заводной #дженкинс-заводной

Вопрос:

Я новичок в groovy и пытаюсь использовать какой-то заводной код. У меня такой сценарий. У меня есть следующие модули

 package com.utils

abstract class Base {

    static String data = ''

}
 
 package com.utils

class A extends Base {

    static String data = 'dummy'

}
 
 package com.utils

class B extends Base {

    static String data = 'dummy'

}
 
 package com.utils

class ShapeFactory {
    static Map <String,Object> shapes = [
        "a": A,
        "b": B
    ]

    static Object get_shapes(String shape) {
        return shapes.get(shape);
    }
}

And in the main file I am using

 

и в основном файле, и здесь происходит сбой со странной ошибкой. Я не смог определить причину, я был бы признателен за любую помощь.

 import com.utils.ShapeFactory

def shapeA = ShapeFactory.get_shapes('a')

shapeA.data // here it fails with the below error
 
 hudson.remoting.ProxyException: org.codehaus.groovy.runtime.typehandling.GroovyCastException: 
Cannot cast object '[]' with class 'java.util.ArrayList' to class 'java.util.Map' 
due to: groovy.lang.GroovyRuntimeException: 
Could not find matching constructor for: java.util.Map()
 

Любая помощь будет оценена, спасибо

Комментарии:

1. Ошибка не возникает из-за какого-либо кода, которым вы поделились. Если вы копируете и вставляете в консоль Groovy, она запускается без ошибок

2. Да, также невозможно воспроизвести с любой версией groovy 3.x или 2.x. Пожалуйста, предоставьте пример кода, который приводит к описываемой вами ошибке, желательно с groovy -v прикрепленным выводом, чтобы мы знали, на каких версиях java и groovy вы работаете.

Ответ №1:

Извиняюсь, я обнаружил проблему, в базовом классе у меня также была переменная Map, которая была инициализирована как массив

 abstract class Base {
   static String data = ''
   static Map mapper = []  // This has to be [:]
}