来自Clojure的带有float参数的Graphics2D.drawString

问题描述

我创建了此Java sample code的Clojure实现,该实现绘制了PNG图像。我的Clojure版本如下。它可以工作,但是如果我不要强制 #Searches in google for "How to Cook" driver.get('https://www.google.com/') time.sleep(2) driver.find_element_by_xpath('//*[@id="tsf"]/div[2]/div[1]/div[1]/div/div[2]/input') \ .send_keys("How to Cook") time.sleep(3) driver.find_element_by_xpath('//*[@id="tsf"]/div[2]/div[1]/div[1]/div/div[2]/input') \ .send_keys(Keys.ENTER) # driver.find_element_by_xpath('//*[@id="search"]') #Clicks on Random Link (the part I need help with) results = driver.find_elements_by_xpath("//div[@class='g']//div[@class='rc']//a[not(@class)]") for result in results: resultsList = result.get_attribute("href") print(resultsList) 的整数参数,Clojure编译器将引发错误api文档显示Graphics2D.drawString()接受浮点参数,但其超类Graphics.drawString()不接受。我该如何说服/欺骗/提示Clojure使用drawString()的浮动版本?

drawString()

解决方法

运行时(不是编译器)必须决定要使用.drawString的哪些重载。愿意自动执行的一组转换可以在Reflector.java中找到。请注意,对于声明为float(如您希望调用)的方法参数,它仅接受floatFloatdouble。但是将两个整数相除的结果是一个有理数。因此,float方法不适用。 int方法也没有,因为同样没有从有理数自动转换为int

在更简单的情况下,您会看到同样的事情:(Float/valueOf (/ 1 2))

由于没有自动转换,因此必须显式转换。您已成功使用int完成了此操作,但是显然您不想调用int方法。解决方案很简单:改用float

,

将您的drawstring调用更改为

  (.drawString message
               (float (/ (- width str-width) 2))
               (float (+ (/ height 2) (/ str-height 4)))))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...