2012-10-29 4 views
0

저는 아마추어 프로젝트에 완전히 빠져 있습니다. 나는 MyInterface을 구현하는 MySingleton을 가지고 있으며 MyMethod()을 호출합니다. MyMethod()MySubcls 중 하나를 매개 변수로 사용해야합니다. 문제는 제네릭없이 MyMethod()을 신고하는 것입니다. 제네릭없이 매개 변수가 다른 많은 선언을 사용해야합니까?인터페이스의 메소드 매개 변수 (제네릭없이)?

Main.java =>는 하나의 방법에서 모든 서브 클래스의 값을 인쇄해야

public class Main{ 
    public static void main(String[] args){ 
     MySubcls01 subCls01 = new MySubcls01(); 
     MySubcls02 subCls02 = new MySubcls02(); 
     MySingleton.INSTANCE.MyMethod(subCls01); 
     MySingleton.INSTANCE.MyMethod(subCls02); 
    } 
} 

enum MySingleton implements MyInterface 
{ 
    INSTANCE; 

    @Override 
    public void MyMethod();// TODO - need to pass subCls01 or subCls02 

    { 
     System.out.println(subCls01.value); 
     System.out.println(subCls02.value); 
    } 

} 

interface MyInterface 
{ 

    void MyMethod(); // TODO - what parameter for any subclass??? 

    // void MyMethod(MySubcls01 subCls01); 
    // void MyMethod(MySubcls02 subCls02); => brute-force approach 

    // <T> void MyMethod(T type); => shouldn't use generics 

} 

class MySupercls 
{ 
    // some stuff 
} 

class MySubcls01 extends MySupercls 
{ 
    String subValue = "i'm from subclass01"; 
} 

class MySubcls02 extends MySupercls 
{ 
    String subValue = "i'm from subclass02"; 
} 
+0

'MySubcls0x' 클래스는 공통 기본 클래스를 가지고 있습니까? –

+0

@ Joachim Suaer 예. – Alf

답변

1

난 당신이 매개 변수로 슈퍼 클래스 유형을 사용하고 실제 유형을 결정하기 위해 instanceof를 사용할 필요가 있다고 생각합니다.

예 :

@Override 
    public void MyMethod(MySupercls inst)// TODO - need to pass subCls01 or subCls02 

    { 
     if (inst instanceof MySubcls01) 
     { 
     //cast it subclass01 
     System.out.println(subCls01.value); 
     }else{ 
     //cast it subclass02 
     System.out.println(subCls02.value); 
     } 
    } 

주 : 메소드를 구현하는 동안 귀하의 코드가 public void MyMethod(); 있습니다. 세미콜론은 제거해야합니다.

+0

재미있는 소리, 시험 해봐야 해. – Alf

0

매개 변수로 사용하는 슈퍼 클래스는 이제

내가 제대로 질문을 이해한다면
public void MyMethod(MySuperClass yourInstance);// TODO - need to pass subCls01 or subCls02 
+0

인수'class'는 Java 컴파일러에서 인기가 없습니다 :-) –

+0

@AndersRostgaardBystrup 감사합니다. 편집했습니다 : – PermGenError

+0

하위 클래스 필드에 액세스 할 수 없습니다. 아니면 틀린가? – Alf

0

, 당신이, MySubcls01MySubcls02에 공통 유형을 기대한다 MyMethod라는() 모든 서브 클래스의 인스턴스를 전달할 수 있습니다 이 경우 MySupercls입니다.

따라서 서명 방법으로 MyMethod(MySupercls obj);이 있어야합니다.

관련 문제