[英]How does integer type casting works in java interop?
public class Hello {
public static void test(int i) {
System.out.println("int");
}
public static void test(long l) {
System.out.println("long");
}
}
user=> (def foo 1)
#'user/foo
user=> (type foo)
java.lang.Long
user=> (Hello/test 1)
long
nil
user=> (Hello/test foo)
int
nil
user=> (Integer. 1)
1
user=> (Integer. foo)
1
user=> (Short. 1)
IllegalArgumentException No matching ctor found for class java.lang.Short clojure.lang.Reflector.invokeConstructor (Reflector.java:183)
我无法弄清楚规则。
简而言之,Clojure没有与Java相同的重载行为。 它是一种不同的语言(在JVM上运行),具有自己的一套规则。 因此,如果您定义一个方法test(short s)
,它将起作用,因为您有一个特定的匹配方法签名,但Clojure编译器不会进行扩展转换为“最接近”的方法。
有关链接的更完整讨论,请参阅我对此问题的回答: Clojure重载了Longs的方法解析
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.