Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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
Clojure 将java.lang.Long传递给整数构造函数_Clojure - Fatal编程技术网

Clojure 将java.lang.Long传递给整数构造函数

Clojure 将java.lang.Long传递给整数构造函数,clojure,Clojure,据我所知,它与以下Java代码相同: (Integer. 1) 所以现在我有以下的结构 new Integer(1) 这是怎么回事?Java Integer类已获得,它们不接受Long 顺便说一下,以下方法不起作用: (Integer. (Long. 1)) #=> 1 这看起来确实像Clojure中的一个bug。对于Java,情况正好相反。这似乎与一个超过五年的“增强”请求有关。也许最好用这个小例子来解决这个问题 new Long(新整数(1))由于和的组合,应该是可以接受的 通

据我所知,它与以下Java代码相同:

(Integer. 1)
所以现在我有以下的结构

new Integer(1)
这是怎么回事?Java Integer类已获得,它们不接受
Long

顺便说一下,以下方法不起作用:

(Integer. (Long. 1))
#=> 1

这看起来确实像Clojure中的一个bug。对于Java,情况正好相反。这似乎与一个超过五年的“增强”请求有关。也许最好用这个小例子来解决这个问题


new Long(新整数(1))
由于和的组合,应该是可以接受的

通过取消装箱(与自动装箱相反),某些对象会隐式转换为基本类型:

将包装类型(整数)的对象转换为其相应的基元(int)值称为取消装箱。当包装类的对象为以下对象时,Java编译器将应用取消装箱:

  • 作为参数传递给需要相应基元类型的值的方法
  • 分配给相应基元类型的变量
在此示例中,
Integer
对象隐式减少为
int
,而
Long
对象隐式减少为
Long


通过加宽,可以在不丢失信息的情况下将基本类型隐式转换为“加宽”基本类型。这意味着
int
可以转换为
long
,但不能转换为其他方式,因此应拒绝
新整数(新长(1))

确定。Java自动取消对整型/长型类型的装箱。没关系。但是加宽应该是
int到long、float或double
,但不是我在示例中所做的(
long->int
)等等,你是对的。这似乎与此相反。这确实有点奇怪。@fl00r有趣的是,当我在Java中尝试这一点时,
javac
抱怨
new Integer(new Long(1))
并接受
new Long(new Integer(1))
,正如预期的那样。好的,我得到了这段Java代码,它将Long转换为int@fl00r,我对Clojure源代码不太熟悉,但是看到它如何抱怨
clojure.lang.Reflector.invokeConstructor
,我认为问题在于类型逻辑,而不是
clojure.lang.RT
中的转换函数。
(Long. (Integer. 1))