小编fin*_*nnw的帖子

插入Java编译器

我有一个后编译步骤来操作生成的类的Java字节码.我想让图书馆消费者尽可能轻松地生活,所以我正在研究如何使这个过程自动化,并且(如果可能的话)编译器不可知.

注释处理API提供了许多的期望特征(自动服务发现;通过Eclipse的支持).不幸的是,这是针对代码生成器,并不支持对现有工件的操作:

该工具的初始输入被认为是由第0轮创建的; 因此,尝试创建与其中一个输入相对应的源文件或类文件将导致FilerException.

API推荐的Decorator模式不是一个选项.

我可以看到如何使用运行时代理/检测执行该步骤,但这是一个比手动构建步骤更糟糕的选择,因为它需要任何人甚至被API外围触摸以非显而易见的方式配置其JVM.

有没有办法插入或包装javac调用的编译器工具?有没有人成功地颠覆了注释处理器来操纵字节码,无论文档说什么?

java compiler-construction instrumentation annotations

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

生成具有可变比例"1"位的随机二进制数

我需要一个函数来生成随机整数.(long现在假设Java 类型,但这将扩展到BigIntegerBitSet稍后.)

棘手的部分是有一个参数P,它指定结果中任何位的(独立)概率为1.

如果P = 0.5,那么我们可以使用标准随机数发生器.P的一些其他值也易于实现.这是一个不完整的例子:

Random random = new Random();

// ...

long nextLong(float p) {
    if      (p == 0.0f)   return 0L;
    else if (p == 1.0f)   return -1L;
    else if (p == 0.5f)   return random.nextLong();
    else if (p == 0.25f)  return nextLong(0.5f) & nextLong(0.5f);
    else if (p == 0.75f)  return nextLong(0.5f) | nextLong(0.5f);
    else if (p == 0.375f) return nextLong(0.5f) & nextLong(0.75f); // etc
    else {
      // What goes here??
      String message …
Run Code Online (Sandbox Code Playgroud)

java random optimization bit-manipulation

6
推荐指数
2
解决办法
3727
查看次数

将表限制为只有一行

限制SQL表以允许它只有一行的最简洁方法是什么?

此相关问题讨论了为什么存在这样的表,而不是如何实现约束.

到目前为止,我只发现涉及一个唯一键列的黑客,这些键被限制为具有特定值,例如ALWAYS_0 TINYINT NOT NULL PRIMARY KEY DEFAULT (0) CONSTRAINT CHECK_ALWAYS_0 CHECK (ALWAYS_0 = 0).我猜可能有一种更清洁的方法.

理想的解决方案是可移植SQL,但特定于MS SQL Server或postgres的解决方案也很有用

sql sql-server

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

IllegalStateException是否适用于不可变对象?

你会扔一个IllegalStateExceptionif:

  1. 由于一个或多个字段的值,方法无法完成其工作
  2. 那些字段final只在构造函数中分配?

教科书示例:您的类是不可变的Collection<BigInteger>,您的方法应该返回最大元素,但此实例为空.

我已经阅读了关于这个主题的Kevin Bourillon博客文章,我不确定适用哪条规则.

UnsupportedOperationException - 这意味着无论实例的构造方式如何,对于此类的实例(具体类型),调用的方法始终会失败.

当然不.此类的许多实例都不为空,操作也会成功.

IllegalStateException - ...确实存在至少一个有问题的实例可能已进入的备用状态,它将通过检查... <snip> ...另请注意,此异常是否合适,无论它是否合适实际上可能会改变实例状态的这个方面,或者已经太晚了.

不完全的.这个实例是用零长度构造的,所以这个实例不是,也永远不会是非空的.

IllegalArgumentException - 抛出此异常意味着此参数至少存在一个其他值,该值将导致问题检查通过.

如果有问题的参数是隐式this参数,则可以应用.这是我很想抛出的例外,但我担心它可能会令人困惑.


更新:将示例更改为Collection<Integer>,Collection<BigInteger>因为存在标识元素(Integer.MIN_VALUE)的事实会分散问题.

java exception

6
推荐指数
2
解决办法
1951
查看次数

推荐的方法是在Lua 5.2中递归地相互引用2个以上的模块

有办法吗?

  • 两个Lua模块(让我们称他们为AB)
  • 每个模块使用另一个模块的功能,因此它们必须require相互配合
  • 第三个模块(让我们称之为C)可以使用A但不能使用Beg

C.lua:

local A = require 'A'

-- ...

A.foo()
Run Code Online (Sandbox Code Playgroud)
  • 可能有另一个模块D需要B但不需要A和/或E要求两个AB
  • 无论是A也不是B,也没有他们的成员应该被加入到全局命名空间.
  • 避免使用modulesetfenv函数(Lua 5.2中不推荐使用)

相关:Lua - 我如何使用另一个lib?(注意:此解决方案不处理循环依赖.)

lua module circular-dependency lua-5.2

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

使JTable单元格可编辑 - 但*不*通过双击

我正在尝试JTable使用以下行为向a添加列(类似于Windows资源管理器和类似的shell):

  • 像往常一样,可以单击一次单元格以选择它.
  • 可以双击单元格以执行单独的操作(启动外部程序.)
  • 单元格值(字符串)仍然可以通过单击第二次(暂停后)或按下F2单元格突出显示时进行编辑.

双击不得触发单元格的编辑,但如果可能,我希望保留任何其他默认编辑触发器.

我曾尝试添加一个MouseListener表,并消耗所有MouseEventS,但这并不工作-如果我回到trueisCellEditable()那么我的听众从来没有收到任何点击事件,但如果我回到false然后F2不再起作用.

这可以仅使用事件监听器来实现吗?如果我可以避免它,我宁愿不搞乱PLAF功能.

java swing jtable tablecelleditor

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

可以安全地在单独的线程中更新BufferedImage的单独区域吗?

我有一组BufferedImage实例,一个主图像和一些通过调用getSubImage主图像创建的子图像.子图像不重叠.我也在修改子图像,我想把它分成多个线程,每个子图像一个.

从我的理解如何BufferedImage,RasterDataBuffer工作,这应该是安全的,因为:

  • 仅从一个线程访问BufferedImage(及其各自WritableRasterSampleModel)的每个实例.
  • 共享ColorModel是不可变的
  • DataBuffer不具有字段可被修改(即可以改变是所述背衬阵列的元件的唯一的东西.)
  • 在单独的线程中修改数组的不相交段是安全的.

但是我在文档中找不到任何说明这样做绝对安全的内容.我可以认为它是安全的吗?我知道有可能处理孩子Raster的副本,但我宁愿避免这种情况,因为内存限制.

否则,是否可以在不复制父图像区域的情况下使操作成为线程安全的?

java multithreading bufferedimage thread-safety

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

在Java中访问shell环境变量

有谁知道如何在Java中访问标准shell环境的环境变量?我正在使用ProcessBuilder类,我必须指定我正在运行的shell脚本中使用的特定环境变量,这些变量存在于标准shell环境中.

访问ProcessBuilder环境不起作用.

java shell environment-variables

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

标准Lua字节码和LuaJIT字节码之间的差异

我一直在尝试反编译一个LuaJIT字节码文件.我设法拆卸它(但找不到任何方法重新组装它).所以我正在考虑编写一些软件来从LuaJIT字节码转换为标准的Lua字节码,然后通过LuaDec很好地运行.

但是LuaJIT字节码和标准Lua字节码之间有什么区别?

lua bytecode luajit

5
推荐指数
2
解决办法
4066
查看次数

给定原点和半径,如何找出p(x,y,z)是否在环面内?

我试图在块游戏中创建一个3D圆环,所以我需要评估一系列坐标,看看它们是否在圆环内.我用球体做的方式是:

shapefunc = function (pos,fields)
  map = {}
  pos.x = math.floor(pos.x+0.5)
  pos.y = math.floor(pos.y+0.5)
  pos.z = math.floor(pos.z+0.5)

  for x=-fields.radius,fields.radius do
    for y=-fields.radius,fields.radius do
      for z=-fields.radius,fields.radius do
        if x*x+y*y+z*z <= fields.radius*fields.radius then
          table.insert(map,{x=pos.x+x,y=pos.y+y,z=pos.z+z})
        end
      end
    end
  end
  return map
end
Run Code Online (Sandbox Code Playgroud)

给定高度(在y轴上),次要和主要半径(在xz轴上)和一个原点,我试过的评估表达式都没有给我任何接近圆环的东西.

3d lua geometry

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