小编mik*_*era的帖子

在Clojure deftype中覆盖equals,hashCode和toString

我正在尝试使用deftype在Clojure中创建一个新类型来实现一个二维(x,y)坐标,它实现了一个"位置"协议.

我还想让它实现标准的Java equals,hashCode和toString方法.

我最初的尝试是:

 (defprotocol Location   
   (get-x [p])  
   (get-y [p])   
   (add [p q]))


 (deftype Point [#^Integer x #^Integer y]   
     Location
       (get-x [p] x)
       (get-y [p] y) 
       (add [p q] 
         (let [x2 (get-x q)
               y2 (get-y q)]
           (Point. (+ x x2) (+ y y2))))   
     Object
       (toString [self] (str "(" x "," y ")"))
       (hashCode [self] (unchecked-add x (Integer/rotateRight y 16)))
       (equals [self b] 
         (and 
           (XXXinstanceofXXX Location b) 
           (= x (get-x b)) 
           (= y (get-y b)))))
Run Code Online (Sandbox Code Playgroud)

但是,如果b参数实现了Location协议,则equals方法仍需要一些方法.

什么是正确的方法?我是在正确的轨道上吗?

protocols equals clojure deftype

10
推荐指数
1
解决办法
2851
查看次数

Java中的键绑定与键侦听器

我注意到在Java/Swing中,似乎至少有两种不同的方法来处理关键事件:

每个人的优点/缺点是什么,何时你更喜欢一个而不是另一个?

java swing key-events keylistener key-bindings

10
推荐指数
2
解决办法
7103
查看次数

有效地确定置换的奇偶性

我有一个包含值0,1,2,....(N-1)int[]的长度数组N,即它表示整数索引的排列.

确定排列是奇数还是奇偶校验的最有效方法是什么?

(如果可能的话,我特别希望避免为临时工作空间分配对象......)

java algorithm permutation

10
推荐指数
2
解决办法
4530
查看次数

在六边形内生成随机点以用于程序性游戏内容

我正在使用程序技术为我正在编写的游戏生成图形.

为了生成一些树林,我想在以<0,0>为中心的正六边形区域内随机散布树木.

以统一的方式生成这些点的最佳方法是什么?

language-agnostic random algorithm procedural-generation

9
推荐指数
3
解决办法
3302
查看次数

使用Java Web Start/JNLP启用JVM选项

我正在创建一个Web Start应用程序,它将受益于一些较新的JVM选项(特别是转义分析,G1垃圾收集器等)

同时,我希望应用程序能够在不支持这些选项的旧JVM上正常工作.

有没有一个很好的方法来实现这一目标?

java jnlp jvm java-web-start

9
推荐指数
1
解决办法
1万
查看次数

随机选择一组不同整数的最有效方法

我正在寻找最有效的算法来随机选择一组n个不同的整数,其中所有整数都在某个范围[0..maxValue].

约束:

  • maxValue大于n,可能更大
  • 我不在乎输出列表是否排序
  • 必须以相同的概率选择所有整数

我最初的想法是构造一个整数列表[0..maxValue]然后随机提取n个元素而不替换.但这似乎效率很低,特别是如果maxValue很大的话.

更好的解决方案?

language-agnostic random algorithm combinations

9
推荐指数
2
解决办法
5031
查看次数

用于roguelike游戏的纯Java文本界面

好吧,这听起来像是一个疯狂的想法 - 但我有兴趣用纯Java 模仿20世纪80年代风格的roguelike游戏文本界面,即使用Swing或类似的东西.

这大致是它需要做的事情:

  • 提供固定大小字符的固定大小网格作为"屏幕"(例如100*75)
  • 使用适当的等宽字体,理想情况下有许多有趣的符号
  • 允许单独设置每个字符位置的前景色和背景色
  • 允许在屏幕中的任何位置打印字符串或单个字符(这应该覆盖这些位置中屏幕缓冲区中已有的内容)

任何人都知道一个好的现有解决方案,可以实现这一点 或者我是不是从头开始一起黑客攻击?

ps我想要纯Java的原因是它可以在沙盒applet中运行.所以像jcurses这样的JNI解决方案被遗憾地排除了......

java swing roguelike

9
推荐指数
1
解决办法
5314
查看次数

在Java中实现阻塞函数调用

在Java中实现阻塞函数调用的推荐/最佳方法是什么,以后可以通过另一个线程的调用解除阻塞?

基本上我想在一个对象上有两个方法,第一个调用阻塞任何调用线程,直到第二个方法由另一个线程运行:

public class Blocker {

  /* Any thread that calls this function will get blocked */
  public static SomeResultObject blockingCall() {
     // ...      
  }

  /* when this function is called all blocked threads will continue */
  public void unblockAll() {
     // ...
  }

} 
Run Code Online (Sandbox Code Playgroud)

意图BTW不仅仅是为了获得阻塞行为,而是编写一种方法,在可以计算所需结果的某个未来点之前阻塞.

java concurrency blocking

9
推荐指数
1
解决办法
1万
查看次数

避免在Clojure DSL中发生名称冲突

作为一个侧面项目,我正在创建一个用于图像合成的Clojure DSL(clisk).

我对函数命名的最佳方法有些不确定,其中我在DSL中具有与Clojure核心中的+函数类似的函数,例如我的DSL中需要函数或类似的东西以附加地组合图像/执行矢量数学运算.

据我所知,有几个选择:

  1. +在我自己的命名空间中使用相同的名称().在DSL代码中看起来不错,但会覆盖clojure.core版本,这可能会导致问题.人们可能会感到困惑.
  2. 使用相同的名称,但要求它是限定的(my-ns/+).避免冲突,但use为了方便而阻止人们进入命名空间并且看起来有点难看.
  3. 使用不同的短名称,例如(v+).可以很use容易地避免冲突,但名字有点难看,可能难以记住.
  4. 使用不同的长名称,例如(vector-add).冗长但描述性,没有冲突.
  5. 用多方法排除clojure.core/+和重新定义+(正如乔治克所建议的那样).

示例代码可能类似于:

 (show  (v+ [0.9 0.6 0.3] 
             (dot [0.2 0.2 0] 
                  (vgradient (vseamless 1.0 plasma) ))))
Run Code Online (Sandbox Code Playgroud)

什么是最好/最惯用的方法?

dsl namespaces clojure

9
推荐指数
1
解决办法
407
查看次数

冲突的传递依赖是Maven中的一个严重问题吗?

我有一个项目X,它在依赖关系层次结构中显示了很多冲突的依赖关系(如Eclipse的依赖关系层次结构视图中所示).我看到很多东西:

clojure: 1.3.0 (omitted for conflict with 1.4.0) [compile]
Run Code Online (Sandbox Code Playgroud)

这通常是因为X使用的两个库指定了某些其他库的两个不同版本 - 即由于共享的传递依赖性而发生冲突.在很多情况下,冲突是在我无法直接控制的第三方库中.

幸运的是,现在一切都建立并运行正常,但我担心这种情况将来可能会引发问题.

这是一个我应该担心的问题,如果是这样,我应该怎么做呢?

java dependencies clojure dependency-management maven

9
推荐指数
1
解决办法
1822
查看次数