似乎是Java类型的擦除巫毒。
见下文。
如果对differentBaseObjectHolder的三个版本进行注释/取消注释,则可以看到问题。
/*
*
* import org.hl7.fhir.instance.model.api.IAnyResource;
* import org.hl7.fhir.instance.model.api.IBaseCoding;
* import org.hl7.fhir.r4.model.Coding;
* import org.hl7.fhir.r4.model.DomainResource;
* import org.hl7.fhir.r4.model.Identifier;
* import org.hl7.fhir.r4.model.Patient;
*
* */
org.hl7.fhir.r4.model.Patient patOne = new org.hl7.fhir.r4.model.Patient();
List<Identifier> identifierList = new ArrayList<>();
Identifier identifier = new Identifier();
identifier.setSystem("MySystem1");
identifier.setValue("MyValue1");
identifierList.add(identifier);
patOne.setIdentifier(identifierList);
//below works fine
org.hl7.fhir.r4.model.Patient differentBaseObjectHolder = patOne;
//below works fine
//org.hl7.fhir.r4.model.DomainResource differentBaseObjectHolder = (DomainResource) patOne;
//Java Type Erasure Generics kick in. Does not work. Java Generics are horrible
//org.hl7.fhir.instance.model.api.IAnyResource differentBaseObjectHolder = patOne;
List<? extends IBaseCoding> temp = differentBaseObjectHolder.getMeta().getTag();
String tempReport = temp.getClass().getSimpleName();
List<Coding> tagList = new ArrayList<>();
Coding dogA = new Coding().setSystem(null).setCode("Dog").setDisplay("Puppies");
differentBaseObjectHolder.getMeta().getTag().add(dogA);
tagList.add(dogA);
// Add this twice
tagList.add(new Coding().setSystem("http://foo").setCode("Cat").setDisplay("Kittens"));
tagList.add(new Coding().setSystem("http://foo").setCode("Cat").setDisplay("Kittens"));
differentBaseObjectHolder.getMeta().getTag().addAll(tagList);
List<? extends Coding> castList = (List<? extends Coding>) tagList;
/* below does not work :< */
differentBaseObjectHolder.getMeta().getTag().addAll(castList);
=====
hapiFhirVersion = '5.2.0'
implementation group: 'ca.uhn.hapi.fhir', name: 'hapi-fhir-structures-r4', version: hapiFhirVersion
}