다른 클래스에서 호출 할 정적 메소드가 많은이 클래스가있는 코드 조각에 대해 작업해야합니다.서브 클래스 유형에 따라 다른 메소드 호출하기
나는 다음과 같은 하나의 같은 계층 구조에 새로운 클래스를 만들었습니다
public abstract class Superclass implements Comparable, Serializable
{
//Superclass stuff
}
public class MidClass extends Superclass implements Comparable, Serializable
{
//MidClass stuff
}
public class SubClass1 extends SuperClass implements Comparable, Serializable
{
//SubClass1 stuff
}
public class SubClass2 extends MidClass implements Comparable, Serializable
{
//SubClass2 stuff
}
나는 모든 다른 서브 클래스 유형에 대해 다른 정적 메서드를 호출 할 필요가 있음을 감안할 때, 나는 또한 오버로드 된 다음 추가 한 첫 번째 클래스에 방법
public static objForMidClass elaborationMethod(MidClass midClass)
{
//Stuff to do with MidClass obj
}
public static objForSubClass1 elaborationMethod(SublClass1 subClass1)
{
//Stuff to do with SubClass1 obj
}
public static objForSubClass2 elaborationMethod(SubClass2 subClass2)
{
//Stuff to do with SubClass2 obj
}
클래스에서 내가
//Inside "object" and "inputList" Lists there's the correct type/subtype
List<SuperClass> inputList = (List<SuperClass>) object;
if (inputList != null && inputList.size() > 0)
{
for(Iterator<SuperClass> it = inputList.iterator(); it.hasNext();)
{
SuperClass item = it.next();
//Next line gives the error:
//"elaborationMethod(MidClass) in the type classWithStaticMethods is not applicable for the arguments (Superclass)"
AnotherClass retItem = classWithStaticMethods.elaborationMethod(item);
{
}
같은를했습니다 정적 메서드를 호출하는 곳에서
전달 된 객체가 SuperClass의 하위 클래스의 모든 속성이므로 해당하는 SubClass 유형의 정적 메서드를 검색해야한다는 사실을 알 수없는 이유를 설명해 주시겠습니까?
이 상황을 모델링하는 올바른 대체 방법이 무엇인지 말해 줄 수 있습니까?
어떻게'classWithStaticMethods'가 생성되는지는 명확하지 않습니다. – freedev
그것은 질문의 시작 부분에서 내가 말하고있는 "정적 방법"이있는 클래스 일뿐입니다. 내가 사용하는 오버로드 된 메서드는 "elaborationMethod"이며 코드의 두 번째 조각에 선언이 표시됩니다 –
[매개 변수의 실제 형식을 기반으로하는 오버로드 된 메서드 선택] 가능한 복제본 (http://stackoverflow.com/questions/1572322/overloaded- 메소드 선택 기반 매개 변수 - 실제 유형) – Axel