小编jav*_*top的帖子

Java:如何解决缺少Equatable接口的问题?

据我所知,事情如SortedMapSortedSet使用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 Peterswaxwing将密钥类型包装在自定义类中的想法.这样,我可以覆盖equals和hashCode,从而改变相等行为.

java collections equals comparable comparator

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

Java 注释处理:可以访问非注释类的“元素”吗?

Java 注释处理(自 Java 6 起)是一个非常好的概念,因为它允许通过Element接口(和其他接口)访问有关类和方法的大量信息。

但遗憾的是,我不得不凭经验发现,非注释类永远不会传递给自定义注释处理器:

warning: No SupportedAnnotationTypes annotation found on
    my.TESTProcessor, returning an empty set.
Run Code Online (Sandbox Code Playgroud)

我的发现是真的吗?或者我可以“欺骗”编译器以提供有关非注释类的自定义注释处理器信息吗?

java annotations javac annotation-processing

3
推荐指数
1
解决办法
786
查看次数

对于JAXB注释的类,是否有类似PostConstruct的东西?

我需要在一个类被解组之后对它执行某些操作(在它由JAXB构建之后,而不是由我自己构建).

JAXB中有这样的功能吗?

如果没有,我怎么能实现它?

java constructor dependency-injection instantiation jaxb

2
推荐指数
1
解决办法
1908
查看次数

Hibernate:没有SQL字符串的查询?

是否有可能(如果是的话,是否可取)在不使用SQL字符串的情况下对Hibernate映射数据进行查询,而是采用一些OOP方式?

java sql database hibernate

2
推荐指数
1
解决办法
820
查看次数

当有比"int"更多的对象可以容纳时,identity-hashcode会发生什么?

这种方法System.identityHashCode(...)被调用,因为它识别对象,因此两个不同的对象不能具有相同的身份 - 哈希码,对吧?

它返回一个int.但是当对象数量超过整数范围时,在具有大量RAM的系统上会发生什么2^32

那岂不是一个问题,HashMapS和HashSet其上没有覆盖类的工作时小号equalshashCode

编辑:
如果int还不够,我可以为对象获得一些真正的唯一ID吗?

java memory jvm hashcode

2
推荐指数
1
解决办法
891
查看次数

Java Swing:如何为组件定义一个(两者中的)最小维度?

要成功定义最小尺寸,我必须执行以下操作:

// 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)

当我留下一行时它不起作用,这很奇怪,但这不是重点。

我该怎么做,以限制只有一个两个维度(宽度高度),并让该部件和/或布局管理器自动决定对未指定的尺寸?

当我为不想限制的维度使用非常小的值时,许多组件显示错误(即太小)。

java size swing dimensions layout-manager

2
推荐指数
1
解决办法
4338
查看次数

Swing:如何在布局窗口之后从 AWT 线程运行作业?

我的完整 GUI 在 AWT 线程内运行,因为我使用SwingUtilities.invokeAndWait(...).

现在我有一个 JDialog,它只显示一个JLabel,表示某个作业正在进行中,并在作业完成后关闭该对话框。

问题是:标签没有显示。JDialog这项工作似乎在完全布置好之前就开始了。

当我只是打开对话框而不等待作业并关闭时,就会显示标签。

对话框在其构造函数中执行的最后一件事是setVisible(true)
诸如revalidate()repaint()、 ... 之类的东西也没有帮助。

即使我为受监视的作业启动一个线程,并使用它等待someThread.join()它也没有帮助,因为join我猜当前线程(即 AWT 线程)被 阻塞了。

替换JDialogJFrame也没有帮助。

那么,这个概念总体上是错误的吗?或者在确保 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)

java events swing multithreading awt

2
推荐指数
1
解决办法
9178
查看次数

JVM + Linux + Intel的超线程=

我注意到JVM线程由于某些原因在Linux下作为进程运行(如果我错了,请纠正我).此外,事实上英特尔的超线程仅为属于同一进程的两个线程提供了额外的并行化.

这是否意味着单个多线程JVM程序不会从Linux下的超线程中获利,因为它的线程不是来自CPU的线程"观点"?

java linux multithreading jvm hyperthreading

2
推荐指数
1
解决办法
2704
查看次数

Linux:如何使用脚本委派外来命令行参数?

我想编写一个包装器bash脚本,并将所有参数传递给被调用的程序.我很确定,这是正常的:

#!/bin/sh
someProgam $@
Run Code Online (Sandbox Code Playgroud)

但是当传递异国情调的论点(空洞,未转义,引号,......)时,这就失败了.

例如:没有包装器脚本,会someProgram "1 2" 3产生参数
[1 2][3].
但是从脚本调用,我得到的[1],[2],[3].

大括号仅用于可视化.

注意:这是一个Java程序,它被称为.但我觉得没关系.

linux bash scripting command-line arguments

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

JavaEE6 + REST:如何在运行时获取所有REST资源?

是否有可能在运行时获取所有已注册REST资源的列表?

使用REST资源我的意思是:

  • 任一具有注释,比如@Path(...) 在运行时由服务器(因此横穿使用反射不会做所有类)被认为是,
  • 或所有路径的URI(REST类可以有多个路径).

注1:我使用自动配置(JavaEE 6的新功能)和Netbeans只生成一个空ApplicationConfig类.

注2:使用Netbeans 6.9,JavaEE 6,Glassfish 3.是否需要有关我的生态系统的更多信息?

java rest web-services glassfish java-ee

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

浮点数(图形)的按位运算?

可能重复:
如何对浮点数执行按位运算

大家好!

背景:
我知道可以在图形上应用按位运算(例如XOR).我也知道,在图形程序中,图形数据通常存储在浮点数据类型中(例如,可以将数据"乘以"1.05).因此必须能够对浮点数据执行按位运算,对吗?

我需要能够对浮点数据执行按位运算.我希望将数据转换为长,按位操纵它,并投退浮动.

我假设,存在一种实现这一目标的数学方法,它更优雅(?)和/或更快(?).

我已经看到了一些答案,但他们无能为力,包括这一个.

编辑:
另一个问题涉及无效指针转换,这将依赖于更深层次的数据表示.所以这不是一个"完全重复".

math floating-point integer bit-manipulation

0
推荐指数
1
解决办法
3177
查看次数

Java的[输入|输出] Streams的单方法调用每个字节:性能问题?

[输入|输出]从JDK1.0开始存在,而从JDK1.1开始存在字符对应的读者|写入者.

大多数概念似乎相似,但有一个例外:的基类声明其处理一个抽象方法一次字节,而基地读/写器的类声明,其处理整个一个抽象方法char-arrays.

因此,鉴于我理解正确,每个重写的类都限于处理单个字节(从而为每个字节执行至少一个方法调用!),而被覆盖的读取器/写入只需要每个数组的方法调用(-buffer).

这不是一个巨大的性能问题吗?

流是否可以作为InputStream或者的子类实现OutputStream,但是仍然基于byte-arrays?

java io stream writer

0
推荐指数
1
解决办法
412
查看次数