首先,我知道您可以使用Class<T>
将Type作为参数传递。
但是,我有一个场景如下:
假设我有一个创建MyOwnType的方法(下面的代码编译):
public MyOwnType<? extends Type,? extends Type> createMyOwnType(String name, Class<? extends Type> T1, Class<? extends Type> T2)
我真正想要做的是使用Type变量T1和T2来构造MyOwnType:
MyOwnType<T1,T2>
我知道你可以直接构造MyOwnType而不使用createMyOwnType方法。但我想使用适当的工厂模式为用户构建MyOwnType +我将编写的一些约束。
我不想逐一检查所有参数,如果T1是某种类型,而T2是某种类型,那么建议MyOwnType。因为在某些情况下,我可以有很多Ts,它们都是Type的子类型。因此,我将检查T1xT2xT3xT_n组合。
因此,我的问题是有没有办法根据提供的参数(T1和T2)创建MyOwnType,类似于以下代码:
MyOwnType<T1,T2> myowntype=new MyOwnType<T1,T2>(name);
上面的代码由于Java编译器找不到符号T1,T2而不能编译。
答案 0 :(得分:1)
在这种情况下,您可以使用java泛型。请参阅您的案例示例:
class Type {}
// create some classes based on Type
class Car extends Type {}
class Bike extends Type {}
class Boat extends Type {}
@Data
class MyOwnType<T1 extends Type, T2 extends Type > {
private String name;
private T1 field1;
private T2 field2;
}
public class SomeClass {
public static <T1 extends Type, T2 extends Type> MyOwnType<T1, T2> createMyOwnType(String name) {
MyOwnType<T1, T2> result = new MyOwnType<>();
result.setName(name);
return result;
}
public static void main(String[] args) {
MyOwnType<Car, Boat> sample1 = createMyOwnType("orange");
Car car = sample1.getField1();
Boat boat = sample1.getField2();
MyOwnType<Boat, Bike> sample2 = createMyOwnType("red");
}
}
这里不是将参数传递给工厂方法,而是在声明变量“sample1”和“sample2”时指定所需的类型。我希望这是你想要的。
但是如果你想创建真正的工厂,即在方法中使用类型,那么它是不可能的,因为Java不支持这个。你可以像我的例子那样准备课程。在Inside方法中,您只知道T1和T2扩展了Type。