据我所知,事情如SortedMap或SortedSet使用compareTo(而不是equals上)Comparable<?>类型检查平等(contains,containsKey).
但是,如果某些类型在概念上是等同的,但不具有可比性呢?
(哈希码,内存地址,......)
我必须声明一个Comparator<?>并覆盖该方法int compareTo(T o1, To2).好的,我可以为被认为相等的实例返回0.但是,对于非实际情况,当订单不明显时我会返回什么?
使用SortedMap或SortedSet的方法是否相等,但(概念上)不可比的类型好吗?
谢谢!
编辑:
我不想存储已排序的东西,但我会使用"通常"的Map和Set,我无法"覆盖"相等行为.
编辑2:
为什么我不能覆盖equals(...):
我需要改变外来类的相等行为.我无法编辑它.
编辑3:
想想.NET:它们具有IEquatable接口,可以在不触及可比行为的情况下改变相等行为.
编辑4:
我不能只compareTo返回0表示相等,1表示不相等的实例吗?什么是大问题?我进行了一些测试,似乎SortedMap/SortedSet在一对实例上调用compareTo一次.是的,订单没有意义,但为什么它应该是我的问题呢?我不需要订单.*我只需要改变平等行为.可悲的是,大多数人都无法理解这一点.
注意:现在证明为非平等实例返回1的概念是错误的.
编辑5:
改变外国阶级的平等行为是一个坏主意吗?当然?我不这么认为:为什么我允许改变使用外国类的比较行为Comparator?
编辑6:
感谢Mark Peters和waxwing将密钥类型包装在自定义类中的想法.这样,我可以覆盖equals和hashCode,从而改变相等行为.
Java 注释处理(自 Java 6 起)是一个非常好的概念,因为它允许通过Element接口(和其他接口)访问有关类和方法的大量信息。
但遗憾的是,我不得不凭经验发现,非注释类永远不会传递给自定义注释处理器:
warning: No SupportedAnnotationTypes annotation found on
my.TESTProcessor, returning an empty set.
Run Code Online (Sandbox Code Playgroud)
我的发现是真的吗?或者我可以“欺骗”编译器以提供有关非注释类的自定义注释处理器信息吗?
我需要在一个类被解组之后对它执行某些操作(在它由JAXB构建之后,而不是由我自己构建).
JAXB中有这样的功能吗?
如果没有,我怎么能实现它?
是否有可能(如果是的话,是否可取)在不使用SQL字符串的情况下对Hibernate映射数据进行查询,而是采用一些OOP方式?
这种方法System.identityHashCode(...)被调用,因为它识别对象,因此两个不同的对象不能具有相同的身份 - 哈希码,对吧?
它返回一个int.但是当对象数量超过整数范围时,在具有大量RAM的系统上会发生什么2^32?
那岂不是一个问题,HashMapS和HashSet其上没有覆盖类的工作时小号equals和hashCode?
编辑:
如果int还不够,我可以为对象获得一些真正的唯一ID吗?
要成功定义最小尺寸,我必须执行以下操作:
// setting minimal width AND height
Dimension min = new Dimension(100, 100);
comp.setMinimumSize(min);
comp.setPreferredSize(min);
comp.setSize(min);
Run Code Online (Sandbox Code Playgroud)
当我留下一行时它不起作用,这很奇怪,但这不是重点。
我该怎么做,以限制只有一个两个维度(宽度或高度),并让该部件和/或布局管理器自动决定对未指定的尺寸?
当我为不想限制的维度使用非常小的值时,许多组件显示错误(即太小)。
我的完整 GUI 在 AWT 线程内运行,因为我使用SwingUtilities.invokeAndWait(...).
现在我有一个 JDialog,它只显示一个JLabel,表示某个作业正在进行中,并在作业完成后关闭该对话框。
问题是:标签没有显示。JDialog这项工作似乎在完全布置好之前就开始了。
当我只是打开对话框而不等待作业并关闭时,就会显示标签。
对话框在其构造函数中执行的最后一件事是setVisible(true)。
诸如revalidate()、repaint()、 ... 之类的东西也没有帮助。
即使我为受监视的作业启动一个线程,并使用它等待someThread.join()它也没有帮助,因为join我猜当前线程(即 AWT 线程)被 阻塞了。
替换JDialog为JFrame也没有帮助。
那么,这个概念总体上是错误的吗?或者在确保 a (或) 完全布局后我可以管理它来完成某些工作吗?JDialogJFrame
我想要实现的简化算法:
JDialog我设法编写了一个可重现的测试用例:
编辑答案中的问题现已解决:此用例确实显示标签,但由于对话框的模态,它在“模拟过程”后无法关闭。
import java.awt.*;
import javax.swing.*;
public class _DialogTest2 {
public static void main(String[] args) throws Exception {
SwingUtilities.invokeAndWait(new Runnable() { …Run Code Online (Sandbox Code Playgroud) 我注意到JVM线程由于某些原因在Linux下作为进程运行(如果我错了,请纠正我).此外,事实上英特尔的超线程仅为属于同一进程的两个线程提供了额外的并行化.
这是否意味着单个多线程JVM程序不会从Linux下的超线程中获利,因为它的线程不是来自CPU的线程"观点"?
我想编写一个包装器bash脚本,并将所有参数传递给被调用的程序.我很确定,这是正常的:
#!/bin/sh
someProgam $@
Run Code Online (Sandbox Code Playgroud)
但是当传递异国情调的论点(空洞,未转义,引号,......)时,这就失败了.
例如:没有包装器脚本,会someProgram "1 2" 3产生参数
[1 2]和[3].
但是从脚本调用,我得到的[1],[2],[3].
大括号仅用于可视化.
注意:这是一个Java程序,它被称为.但我觉得没关系.
是否有可能在运行时获取所有已注册REST资源的列表?
使用REST资源我的意思是:
@Path(...) 和在运行时由服务器(因此横穿使用反射不会做所有类)被认为是, 注1:我使用自动配置(JavaEE 6的新功能)和Netbeans只生成一个空ApplicationConfig类.
注2:使用Netbeans 6.9,JavaEE 6,Glassfish 3.是否需要有关我的生态系统的更多信息?
可能重复:
如何对浮点数执行按位运算
大家好!
背景:
我知道可以在图形上应用按位运算(例如XOR).我也知道,在图形程序中,图形数据通常存储在浮点数据类型中(例如,可以将数据"乘以"1.05).因此必须能够对浮点数据执行按位运算,对吗?
我需要能够对浮点数据执行按位运算.我不希望将数据转换为长,按位操纵它,并投退浮动.
我假设,存在一种实现这一目标的数学方法,它更优雅(?)和/或更快(?).
我已经看到了一些答案,但他们无能为力,包括这一个.
编辑:
另一个问题涉及无效指针转换,这将依赖于更深层次的数据表示.所以这不是一个"完全重复".
[输入|输出]从JDK1.0开始存在流,而从JDK1.1开始存在字符对应的读者|写入者.
大多数概念似乎相似,但有一个例外:的基类流声明其处理一个抽象方法单一次字节,而基地读/写器的类声明,其处理整个一个抽象方法char-arrays.
因此,鉴于我理解正确,每个重写的流类都限于处理单个字节(从而为每个字节执行至少一个方法调用!),而被覆盖的读取器/写入器只需要每个数组的方法调用(-buffer).
这不是一个巨大的性能问题吗?
流是否可以作为InputStream或者的子类实现OutputStream,但是仍然基于byte-arrays?
java ×10
jvm ×2
linux ×2
swing ×2
annotations ×1
arguments ×1
awt ×1
bash ×1
collections ×1
command-line ×1
comparable ×1
comparator ×1
constructor ×1
database ×1
dimensions ×1
equals ×1
events ×1
glassfish ×1
hashcode ×1
hibernate ×1
integer ×1
io ×1
java-ee ×1
javac ×1
jaxb ×1
math ×1
memory ×1
rest ×1
scripting ×1
size ×1
sql ×1
stream ×1
web-services ×1
writer ×1