한다고 가정 우리가 다음 것은 우리가 cloneList를 원하는 것입니다자바 목록 <Parent> 및 목록 <Children> 방법
public List<Something> cloneList(List<Something> original){
List<Something> newList=new ArrayList<>();
for(Something e:original){
Something newE=new Something();
newE.setXXX(e.getXXX());
newList.add(newE);
}
return newList;
}
:
public class Parent{
public void setXXX(String XXX);
public String getXXX();
}
public class Children extends Parent{
....
}
지금 나는 다음과 같은 방법이라고 복제 목록을 만들려면 List<Parent>
과 List<Children>
모두에 적용 할 수 있습니다. 따라서 어쨌든 "Something"에 적용 할 수 있습니까? 1. 어떤 직렬화 방식이나 반사를 사용하지 마십시오
뭔가? "부모를 확장"또는 인해 Collection<Children>
가정에 호환되지 않는 자바 Collection<Parent>
에 "부모"가 될 수 없습니다.
우리는 Parent and Children 클래스를 수정할 수 없습니다. 이것은 타사 Jar에서 미리 정의됩니다. 적어도에 대한, 그리고
public <X extends Parent> List<X> cloneList(final List<X> original)
가 작동합니다 2.
< >을 괄호 안에 게시 할 수 없다는 사실을 고려하십시오. 질문을 코드로 지정하지 않으면 –
제네릭 사용 ... – brso05
추가 한 모든 제약 조건을 만족하는 솔루션이 없습니다. 클래스가 정적으로 알려지지 않은 개체의 충실한 복사본을 만들려면 정적 또는 사용 가능한 것으로 알려진 메서드를 사용해야합니다. 이러한 클래스에서 복사 메서드를 이미 사용할 수 있으면 확실하게 샘플 코드에서 복사 메서드를 사용하게됩니다. (Object.clone()은 그 목적을 달성 할 수 있지만 부모 클래스가 Cloneable을 구현할 때만 가능하다. 그렇다고하더라도 Object.clone()은 매우 문제가 될 수있다.) –