Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-将泛型限制为内置/不可变类型(整型、短型等)?_Java_Generics - Fatal编程技术网

Java-将泛型限制为内置/不可变类型(整型、短型等)?

Java-将泛型限制为内置/不可变类型(整型、短型等)?,java,generics,Java,Generics,我正在编写一个容器类,该代码的要求规定:(a)我应该使用泛型,(B)我应该只允许它接受内置的包装类(如Integer、Short、Double等) 也就是说,我希望能够使用以下内容: MyContainer<Integer> MyContainer<Double> MyContainer 霉菌容器 但这种东西不应该被允许: MyContainer<MyClass1> MyContainer<MyClass2> MyContainer 霉菌容器

我正在编写一个容器类,该代码的要求规定:(a)我应该使用泛型,(B)我应该只允许它接受内置的包装类(如Integer、Short、Double等)

也就是说,我希望能够使用以下内容:

MyContainer<Integer>
MyContainer<Double>
MyContainer
霉菌容器
但这种东西不应该被允许:

MyContainer<MyClass1>
MyContainer<MyClass2>
MyContainer
霉菌容器

通过对这一主题的研究,我发现了如下内容:

public class MyContainer<T extends (???)>
公共类MyContainer
这让我想知道:是否所有的内置包装器都扩展了一个我可以通过这种方式指定的公共类来实现这一点

或者,有没有办法让泛型只接受定义的类列表?这可能是一个更好的选择,因为这样泛型类型就不会被扩展公共接口的用户定义类所愚弄,但我不确定是否有可能做到这一点(?)

或者,有没有办法让泛型只接受 定义的类列表

不,没有这样的功能

泛型边界提供了对类型层次结构的限制。例如,对于内置数字类型,公共祖先是
Number
。但是您不能阻止任何人创建自己的
Number
子类并将其用于容器类

你在泛型方面运气不好。考虑使用一个工厂,它为您关心的内置类型提供预构建的容器类型,并为任何其他类型抛出异常。 或者,有没有办法让泛型只接受 定义的类列表

不,没有这样的功能

泛型边界提供了对类型层次结构的限制。例如,对于内置数字类型,公共祖先是
Number
。但是您不能阻止任何人创建自己的
Number
子类并将其用于容器类

你在泛型方面运气不好。考虑使用一个工厂,它为您关心的内置类型提供预构建的容器类型,并为任何其他类型提供一个异常。

< P>,根据JavaDoc链接,

直接已知子类:

  AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, 
  Integer, Long, Short
其中包括您的包装器类型。当然,它还包括一些。它也不会阻止用户扩展数字。所以不,我认为不使用泛型
t
并在运行时检查类是不可能的

根据Javadoc链接

直接已知子类:

  AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, 
  Integer, Long, Short

其中包括您的包装器类型。当然,它还包括一些。它也不会阻止用户扩展数字。所以不,我认为不使用泛型
t
并在运行时检查类是不可能的

不,最接近的是可比的,但是
日期
是可比的不,最接近的是可比的,但是
日期
是可比的原子整数和原子长当然不是不变的@PeterLawrey即使是用户也可以使用可变类型扩展数字。所以OP似乎不能拥有它。如果
const
关键字做了什么,那么可能。
final
只是使引用不可变,而不是它所指向的。@PeterLawrey我知道。你说的是康斯特。和后藤一起保留的。如果
const
做了一些事情(可能与
final
不同),但是。。。具体是什么?AtomicInteger和AtomicLong当然不是一成不变的@PeterLawrey即使是用户也可以使用可变类型扩展数字。所以OP似乎不能拥有它。如果
const
关键字做了什么,那么可能。
final
只是使引用不可变,而不是它所指向的。@PeterLawrey我知道。你说的是康斯特。和后藤一起保留的。如果
const
做了一些事情(可能与
final
不同),但是。。。到底是什么?