簡體   English   中英

整數類型轉換如何在java互操作中工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM