У меня есть следующие классы, где 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'