我想知道在下面结合我的两个类最好的方法(在C#中)(这样我可以选择是否指定一个类型,如果没有必要的话)?如果有必要,还有什么建议的方法可以编码MyClass以获取更多参数?谢谢!
public class MyClass{
public MyClass() {}
}
public class MyClass<T> {
T myvariable;
public MyClass<T>(T arg){
myvariable = arg;
}
// how can I handle MyClass(arg1, arg2, ....?
// would I need to create classes MyClass<T,U,...> for each number of argument?
}
这样我就可以用两种方式来护理MyClass ......
MyClass my1 = new MyClass()
MyClass<string> my2 = new MyClass("test");
答案 0 :(得分:3)
这样我可以选择是否指定类型,如果没有必要的话
只需合并它们并创建两个构造函数:
class MyClass<T> {
T myvariable;
public MyClass(){
}
public MyClass(T arg){
myvariable = arg;
}
}
如果您不需要通用类型,请使用Void
(不 void
):
public static void main(String[] args) {
final MyClass<Void> my1 = new MyClass<Void>();
final MyClass<String> my2 = new MyClass<String>("Test");
}
编码MyClass以在必要时接受更多参数
如果您需要可变数量的相同类型T
的参数,请使用varargs:
class MyClass<T> {
T[] myvariable;
public MyClass(){
}
public MyClass(T... arg){
myvariable = arg;
}
}
无法声明可变数量的异类类型,例如<T, U, V...>
。
答案 1 :(得分:1)
您可以实现静态工厂方法以避免明确指定类型,例如
public static MyClass<Void> create() {
return new MyClass<Void>()
}
和
public static <T> MyClass<T> create(T type) {
return new MyClass<T>(type);
}
客户端可以创建新的实例,如下所示:
MyClass<Void> noType = MyClass.create();
MyClass<String> withType = MyClass.create("some type");
MyClass<Integer> withInt = MyClass.create(123);
(如果您启用了自动装箱功能)。