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)

我无法弄清楚规则。

===============>>#1 票数:1

简而言之,Clojure没有与Java相同的重载行为。 它是一种不同的语言(在JVM上运行),具有自己的一套规则。 因此,如果您定义一个方法test(short s) ,它将起作用,因为您有一个特定的匹配方法签名,但Clojure编译器不会进行扩展转换为“最接近”的方法。

有关链接的更完整讨论,请参阅我对此问题的回答: Clojure重载了Longs的方法解析

  ask by alice translate from so

未解决问题?本站智能推荐:

2回复

Java互操作的Clojure优化

当使用现有的java类时,如果我做错了某些事情,我经常会收到反射警告,例如 IllegalArgumentException找不到匹配的字段:获取类java.lang.String clojure.lang.Reflector.getInstanceField(Reflector.ja
1回复

clojure Java互操作和接口

我在使用Clojure的Java接口时遇到问题。 我有以下课程:公共课程OpenAccess 其中有一个方法:静态连接connect(String url) 其中Connection是接口:公共接口Connection 在Java中,我可以这样做来建立连接: 我从
1回复

实用的Clojure:宏和Java互操作

在实用Clojure的Java互操作一章中,作者注意到以下有关Java互操作“语法糖”的信息(例如(.method object arguments)而不是(.method object arguments) (. object method arguments) ): 由于这些“语法
3回复

来自clojure a与非标准迭代java API的互操作

我在clojure中使用java类,它为包含一系列记录的特定于域的二进制文件提供检索API。 java类用文件初始化,然后提供一个.query方法,该方法返回一个只有一个方法.next的内部类的实例,因此不能很好地使用通常的java集合API。 外部类和内部类都不实现任何接口。 .
2回复

用于com.google.cloud.storage.StorageImpl的clojure Java互操作

尝试与https://github.com/googleapis/google-cloud-java/blob/master/google-cloud-clients/google-cloud-storage/src/main/java/com/google/cloud进行一些Java互操作/s
1回复

在Clojure(Java可变对象互操作性)中从JSoup文档中删除元素的最佳方法是什么?

使用Clojure完成初学者。 如何在Clojure中访问变异的jsoup文档? 我在下面的代码中要打印出更改后的html,而不是要删除的链接。
1回复

为什么命名空间与用于互操作访问的Java包不同?

我在Clojure REPL上做了以下事情: 这给出了以下结果: 现在这种方法确实存在 。 现在我想我应该能够从REPL访问默认访问方法。 我可靠地告知Clojure命名空间与Java包不同。 (即解决这个问题的方法是通过反射 - 对于不需要在Java中反射的东西)
1回复

Clojure-Java互操作:传递一个OutputStream参数并返回一个String

我正在使用Java库,并且想调用导出数据的方法。 此方法有两种变体:一种带有用作目标文件名的String参数,另一种可以接受OutputStream对象并使用OutputStreamWriter对其进行写入。 我想使用第二种方法,并能够将OutputStream返回到String中,
1回复

Clojure / QuantLib互操作:类加载麻烦

问题陈述: 我希望从Clojure命名空间调用QuantLib Java函数,如下所示: 到目前为止,我已经执行了以下操作: 下载了生成的SWIG接口 。 创建了一个新的Leiningen项目。 复制说的接口到src / main / java / org /
3回复

使Java类在Clojure中作为序列工作

我使用的Java类代表一系列结果(有点像Clojure向量)。 我想将这个类与典型的Clojure序列函数一起使用(即我希望该类的行为就像它支持序列抽象一样)但是我无法更改类,所以我无法使它实现clojure.lang.Seqable或类似的。 另外,令人讨厌的是,该类没有实现java.