2012-10-16 83 views
1

我有一个标志,告诉我要使用哪个类的类型。应该使用静态方法来检索正确的类。类类型需要作为泛型方法的输入。返回实现接口的java类的类型

public class Config{ 
    public static int flag = 1; 
} 

public interface A { 
    public abstract int getResult(); 
} 

public class A1 implements A{ 
    public int getResult{ 
    // ... 
    } 
} 

public class A2 implements A{ 
    public int getResult{ 
    // ... 
    } 
} 

public class AType{ 

    public static Class getType(){ 
     switch (Config.flag) { 
    case 1: 
     return A1.class; 
    case 2: 
     return A2.class; 
     default: 
      return null; 
    } 
} 

“getType()”的返回类型错误。我已经尝试了一些通用的返回类型,但因为它似乎不工作,就像检索类类型以进一步使用...

任何想法如何根据配置标志返回不同的类类型?

我需要的类类型(A1或A2)作为这样一个泛型方法输入:

public static <T extends Message> T[] getArrayFromStream(DataInputStream in, Class<T> returnType) 
     throws IOException { 
    return getArrayFromStream(in, returnType, new Object[0]); 
} 
+2

你是什么意思“返回类型是错误的”?这是一个编译错误?什么是错误?你尝试过哪些通用的返回类型? –

+1

我尝试了一个类似的代码,它对我来说工作得很好。你的错误是什么? –

+0

如果我使用“Class”作为返回类型,eclipse的错误消息是“此方法必须返回Class类型的结果”。 当我使用类“”的返回类型时,则错误为“此方法必须返回Class <?extends Psid>类型的结果”。 当使用“”类时,eclipse告诉我“类型不匹配:无法从类转换为类”。 –

回答

3

我的猜测(由于缺乏信息)是你正在尝试做这个:

Class clazz = getType(); 
A instance = clazz.newInstance(); 

如果这是你需要这样的话......

public Class<? extends A> getType(){...} 

然后

Class<? extends A> clazz = getType(); 
A instance = clazz.newInstance(); 
+0

嗨,我已经试过了,但它没有奏效。 我需要类类型(A1或A2)作为一个更大的项目中的泛型方法的输入,我不能只改变泛型方法。 该方法看起来像这样: 公共静态 T [] getArrayFromStream(DataInputStream类中,类返回类型) \t \t \t抛出IOException异常{ \t \t返回getArrayFromStream(在,返回类型,新的对象[0] ); \t} –

+0

我不认为你给了我们足够的上下文来帮助你。尝试发布更多的代码,因为当我们尝试上面的代码时,它会编译。 –

+0

-_- ...我刚刚意识到我的swith-case子句和eclipse只是返回了一个误导性错误。 :-( =>问题解决了。感谢您的帮助!“它编译”的评论真的很有帮助!^^ –