首页 > 解决方案 > 如何使用方法参数的类类型?

问题描述

我有以下类: Foo1 扩展 Bar 和 Foo2 扩展 Bar

我想在我的方法中传递 Foo1 或 Foo2 的类型来创建 Foo1 或 Foo2,如下所示:

public Bar createMethod( "either type of Foo1, or Foo2" fooType) {
    
    //returns the foo1 or foo2
}

有什么方法可以实现这一目标吗?

标签: javaoop

解决方案


通过声明,您可以使用泛型获得一些灵活性:

public <T extends Bar> T createMethod(Class<T> foo) {
    // do the factoring
    retrun (T) foo1 // (or foo2 depending on the foo passed);
} 

有了这个,以下所有分配都是有效的:

Bar b1 = createMethod(Foo1.class);
Bar b2 = createMethod(Foo2.class);
Foo1 f1 = createMethod(Foo1.class);
Foo2 f2 = createMethod(Foo2.class);

注意ClassCastException:在运行时,如果您没有返回预期的类型,您将得到一个。因此,如果您例如这样做:

public <T extends Bar> T createMethod(Class<T> foo) {
    return (T)new Foo2();
}

Foo1 foo1 = createMethod(Foo1.class);

推荐阅读