Java 如何在泛型参数中指定我的数据类型

Java 如何在泛型参数中指定我的数据类型,java,generics,Java,Generics,嘿,我想做的事情与java泛型有关,可以在我的参数中指定类的泛型类型吗?我不能很好地描述它,这就是为什么我会尝试使用一个例子,我有以下课程: public class List<T> 公共类列表 是否可以指定我的T,因为我希望它仅为整数或布尔值?根据其他SO问题,答案是否 如果要使用Integer或Boolean,也不能使用前面答案中定义的方法,因为据我所知,没有一个类只对Integer和Boolean数据类型通用 在您的情况下,可能更容易创建接受整数或布尔参数的覆盖。根据其他S

嘿,我想做的事情与java泛型有关,可以在我的参数中指定类的泛型类型吗?我不能很好地描述它,这就是为什么我会尝试使用一个例子,我有以下课程:

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
的具体类型,但因为它只是一个参数,您必须为
布尔
整数
找到一个共同的父对象,其中除了不适当的
对象
之外没有任何父对象。