Java 如何在泛型参数中指定我的数据类型
嘿,我想做的事情与java泛型有关,可以在我的参数中指定类的泛型类型吗?我不能很好地描述它,这就是为什么我会尝试使用一个例子,我有以下课程:Java 如何在泛型参数中指定我的数据类型,java,generics,Java,Generics,嘿,我想做的事情与java泛型有关,可以在我的参数中指定类的泛型类型吗?我不能很好地描述它,这就是为什么我会尝试使用一个例子,我有以下课程: public class List<T> 公共类列表 是否可以指定我的T,因为我希望它仅为整数或布尔值?根据其他SO问题,答案是否 如果要使用Integer或Boolean,也不能使用前面答案中定义的方法,因为据我所知,没有一个类只对Integer和Boolean数据类型通用 在您的情况下,可能更容易创建接受整数或布尔参数的覆盖。根据其他S
public class List<T>
公共类列表
是否可以指定我的T
,因为我希望它仅为整数或布尔值?根据其他SO问题,答案是否
如果要使用Integer
或Boolean
,也不能使用前面答案中定义的方法,因为据我所知,没有一个类只对Integer
和Boolean
数据类型通用
在您的情况下,可能更容易创建接受整数
或布尔
参数的覆盖。根据其他SO问题,答案是否定的
如果要使用Integer
或Boolean
,也不能使用前面答案中定义的方法,因为据我所知,没有一个类只对Integer
和Boolean
数据类型通用
在您的情况下,简单地创建接受
整数
或布尔
参数的覆盖可能更容易。是的,您可以更清楚地指定T的值。
如果要将列表限制为单个类型,可以使用:List
或List
。
您也可以使用类似的方法:
List
,它只接受整数、浮点数,是的,您可以更清楚地指定T的值。
如果要将列表限制为单个类型,可以使用:List
或List
。
您还可以使用这样的东西:
List
它只接受整数、浮点数,如果您没有确切的类,它的子类是Boolean和Integer,那么您不能像这样严格定义List
您可以将列表定义为:
List<? super Object> list = new ArrayList<>();
List如果你没有一个确切的类,它的子类是Boolean和Integer,你就不能像这样严格地定义List
您可以将列表定义为:
List<? super Object> list = new ArrayList<>();
List您不能像ernest_k所解释的那样在泛型类类型中直接指定此约束,因为这两种可能的类型没有比对象
更常见的祖先,这意味着最终没有约束。
但您仍然可以使类API强制执行此约束。
将构造函数设为私有,并提供工厂方法,而不是
public class Foo<T> {
private Foo(){}
public static Foo<Integer> ofInteger(){
return new Foo<>();
}
public static Foo<Boolean> ofBoolean(){
return new Foo<>();
}
}
公共类Foo{
私有Foo(){}
整数()的公共静态Foo{
返回新的Foo();
}
boolean()的公共静态Foo{
返回新的Foo();
}
}
并使用它,例如:
Foo<Boolean> booleanFoo = Foo.ofBoolean();
Foo<Integer> integerFoo = Foo.ofInteger();
Foo booleanFoo=Foo.ofBoolean();
Foo integerFoo=Foo.ofInteger();
您不能像ernest_k所解释的那样,在泛型类类型中直接指定此约束,因为这两种可能的类型没有任何比对象
更通用的祖先,这意味着最终没有约束。
但您仍然可以使类API强制执行此约束。
将构造函数设为私有,并提供工厂方法,而不是
public class Foo<T> {
private Foo(){}
public static Foo<Integer> ofInteger(){
return new Foo<>();
}
public static Foo<Boolean> ofBoolean(){
return new Foo<>();
}
}
公共类Foo{
私有Foo(){}
整数()的公共静态Foo{
返回新的Foo();
}
boolean()的公共静态Foo{
返回新的Foo();
}
}
并使用它,例如:
Foo<Boolean> booleanFoo = Foo.ofBoolean();
Foo<Integer> integerFoo = Foo.ofInteger();
Foo booleanFoo=Foo.ofBoolean();
Foo integerFoo=Foo.ofInteger();
您可以限制T
的具体类型,但由于它只是一个参数,您必须为Boolean
和Integer
找到一个共同的父对象,其中除了不适当的对象
之外没有任何其他。您可以限制T
的具体类型,但因为它只是一个参数,您必须为布尔
和整数
找到一个共同的父对象,其中除了不适当的对象
之外没有任何父对象。