GroovyCastException: невозможно преобразовать дочерний класс в родительский класс - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть следующие классы, где ImStageProperties - это родительский класс, у которого есть дочерний элемент RelationalStageProperties, а также есть дочерний класс, называемый TargetDefinitionStageProperties.

package com.starling.informatica.dto.stageProperties

import com.starling.commons.XMLSlurperUtil
import com.starling.informatica.dto.ImParserConstants
import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.TupleConstructor
import groovy.util.slurpersupport.GPathResult

@CompileStatic
@EqualsAndHashCode
@TupleConstructor
class ImStageProperties {
    String name
    String objectVersion
    String versionNumber
    String description

  void set(GPathResult root){
      this.name = XMLSlurperUtil.at(root, ImParserConstants.NAME)
      this.objectVersion = XMLSlurperUtil.at(root, ImParserConstants.OBJECT_VERSION)
      this.versionNumber =XMLSlurperUtil.at(root, ImParserConstants.VERSION_NUMBER)
      this.description = XMLSlurperUtil.at(root, ImParserConstants.DESCRIPTION)
  }

}
package com.starling.informatica.dto.stageProperties

import com.starling.commons.XMLSlurperUtil
import com.starling.informatica.dto.ImParserConstants
import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.TupleConstructor
import groovy.util.slurpersupport.GPathResult

@CompileStatic
@TupleConstructor(includeSuperProperties = true)
@EqualsAndHashCode(callSuper = true)
class RelationalStageProperties extends ImStageProperties{
    String databaseType
    String businessName

    @Override
    void set(GPathResult root){
        super.set(root)
        this.businessName = XMLSlurperUtil.at(root, ImParserConstants.BUSINESS_NAME)
        this.databaseType = XMLSlurperUtil.at(root, ImParserConstants.DATABASE_TYPE)
    }
}
import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.TupleConstructor
import groovy.util.slurpersupport.GPathResult

@CompileStatic
@TupleConstructor(includeSuperProperties = true)
@EqualsAndHashCode(callSuper = true)
class TargetDefinitionStageProperties extends RelationalStageProperties {
    String constraint
    String tableOptions

    void set(GPathResult root){
        super.set(root)
        this.constraint = XMLSlurperUtil.at(root, ImParserConstants.CONSTRAINT)
        this.tableOptions = XMLSlurperUtil.at(root, ImParserConstants.TABLE_OPTIONS)
    }

}

Я получаю сообщение об ошибке в этой строке в классе Spe c. Я использую полиморфизм во время выполнения для создания экземпляра объекта TargerRelationalStageProperties во время выполнения, а переменная stageProperties имеет тип ImStageProperties stati *1011*:

ImStageProperties stageProperties = new TargetDefinitionStageProperties("informatica_testData","1","1","","Teradata","","","")

Ошибка заключается в следующем:

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'com.starling.informatica.dto.stageProperties.TargetDefinitionStageProperties@c7454e87' with class 'com.starling.informatica.dto.stageProperties.TargetDefinitionStageProperties' to class 'com.starling.informatica.dto.stageProperties.ImStageProperties'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...