현재 나의 과제에서는 테스트 케이스를위한 재귀 Field 객체 (두 가지 맞춤 클래스)로 채워진 새로운 SchemaArtifact 객체를 빌드해야합니다. 유창한 인터페이스를 사용하여이 작업을 수행해야합니다. 문제는 내 build() 함수 (트리에서 한 레벨 위로 팝업)는 호출 필드가 최상위 레벨에 있으면 루트 SchemaArtifact를 반환하거나 자식 필드 인 경우 부모를 반환해야한다는 것입니다.Java - Generics를 사용하여 유창한 인터페이스 만들기
public class SchemaHelper{
public SchemaArtifact makeSchema(){
return new SchemaArtifact()
.addField(new Field("FirstName"))
.addField(new Field("Nickname")).build()
.build()
.addField(new Field("LastName")).build();
}
}
public class SchemaArtifact{
private Map<String, Field> fields = new Map();
public addField(Field f){
this.fields.put(field.id, f);
return f;
}
}
public class Field{
public String id;
private Map<String, Field> fields = new Map(); //children
private Field parent; //null if parent is just the main schema
private SchemaArtifact schema; //schema that this Field belongs to
public Field(String id){
this.id = id;
}
public Field addField(Field f){
this.fields.put(field.id, f);
return f;
}
public <T> T build(){
if(this.parent != null){
return (T)this.parent;
}else{
return (T)this.schema;
}
}
}
당신은 내가 여러 유형을 반환하는 제네릭을 사용하여 시도, 볼 수 있듯이,하지만 난 방법 addField (필드) 정의되지 않은 "얻을 :이 혼란 들릴지 알고, 그래서 잘하면 몇 가지 예제 코드는 그것을 지울 수 있습니다 한 번에 둘 이상의 필드를 추가하려고 할 때 Object 유형에 대해. 나중에 불필요한 캐스팅이 필요했던 래퍼 인터페이스를 사용해 보았습니다. 별도의 buildToSchema()/buildToField() 메소드를 사용하면 효과적이지만 라인 아래로 여러 스키마를 생성하는 것이 혼란 스럽습니다.
내가 말했듯이, SchemaArtifact와 Field를 모두 반환하는 단수의 build() 메소드를 얻는 방법이 있습니까?
, 감사합니다타일러
1) 반환 형식이'# addField'에 없습니다. 2) 'T'는 무엇인가? 3)'parent'와'schema'는'Field'에 선언되어 있지 않습니다. – qqilihq
고정 1 및 3 RE # 2 : 답변 [여기]와 같은 것을 구현하려고했습니다 (http://stackoverflow.com/questions/3552537/java-one-function-with-many-return-types -is-it-possible-with-generics), 그러나 나는 아마 그것을 어떻게 든 망쳐 놓을 것이다. 나는 T를 사용하여'build()'가 Object를 리턴한다는 것을 의미한다고 믿는다. 그래서 그 뒤에'addField()'를 사용할 때 오류가 발생한다. –