2014-05-16 3 views
0

매개 변수로 하위 클래스를 전달하고 인스턴스를 만들려고하지만 변환 클래스를 인스턴스화하는 줄에 오류 메시지가 표시됩니다 (호환되지 않습니다. 유형). transClass trans = new transClass()을 사용하여 인스턴스를 만들려고하면 transClass을 알 수 없다고 불평합니다. 여기 제가 사용하고있는 코드가 있습니다.매개 변수로 전달 된 클래스의 메서드 호출 방법

abstract class Transformation { 
    abstract public Object transform(Object obj); 
} 
class MyTransformation extends Transformation { 
    public Object transform(Object obj){ 
    // do stuff to obj 
    return obj; 
    } 
} 

class AnotherClass { 
    public doSomething(Object obj, Class<Transformation> transClass){ 
    // do more stuff to obj 
    Transformation trans = new transClass(); // fails with "Incompatible Types", referring to 'Transformation' and 'transClass' 
    // transClass trans = new transClass(); // alternate attempt, also fails with "Unknown Type" on 'transClass' 
    return trans.transform(obj); 
    } 
} 
+0

경우 정적 방법은 무엇입니까? –

+0

제목에서 '정적'을 삭제했습니다. – Trevor

답변

5

당신은 Class#newInstance 사용해야

public <T extends Transformation> Object doSomething(Object obj, Class<T> transClass) 
    throws Exception { 
    // do more stuff to obj 
    Transformation trans = transClass.newInstance(); 
    return trans.transform(obj); 
} 
+0

+1, 당신의 대답은 좋지만, 매개 변수'transClass'는 아마도'Class '. – rgettman

+0

@rgettman 포인트가 찍혔습니다. 답변이 업데이트되었습니다. –

+0

@LuiggiMendoza'doSomething()'메소드에서'Transformation.class'를 클래스로 전달하면'java.lang.InstantiationException'이 표시됩니다. 추상 클래스를 인스턴스화 할 수 있습니까? – Braj

관련 문제