小编CKi*_*ing的帖子

如何通过 ant 构建脚本编译 .drl 文件

我是 Drools 的新手。我想知道是否可以使用某种可以在 Windows 命令行(shell/cmd)中输入的命令来编译 .drl 文件。我查看了 drools 发行版附带的二进制文件,但我无法找到编译 .drl 文件的方法。我对这样的命令感兴趣的原因是我想编写一个 ant 构建文件,它将编译我的 java 类和规则并创建一个 jar。这个 jar 应该是自给自足的,即从命令行运行 jar 应该运行主程序,该程序在会话中传递事实,从而自动执行对这些事实进行操作的规则。

ant drools

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

如何在Java中生成事件?

首先,我不是在询问事件处理.我知道使用Observer模式实现了处理.

让我举一个小例子.假设我在JFrame上有一个Jbutton.我单击此按钮的顶部.现在按钮如何知道我点击了它?

1)是否有任何java线程等待点击?如果是这样的代码来自哪里(等到我点击部分)?那么每个swing组件是否都在等待线程之上的事件?我认为这是一项非常昂贵的任务.

2)如果没有,这是如何工作的?

java events swing

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

将方法参数限制为具有特定注释的对象

我想创建一个带有参数的方法。参数必须是来自任何具有特定注释的类的对象。通过向该方法传递一个不包含特定 Annotation 的对象来调用该方法必定会导致编译错误。

实现这一目标的最佳方法是什么?

java parameters methods annotations

5
推荐指数
0
解决办法
588
查看次数

访问内部类中的for循环变量

我有一个int数组的数组.

DataArray[X][Y]
Run Code Online (Sandbox Code Playgroud)

我想为每个X创建一个线程,它沿Y迭代.我无法弄清楚如何将适当的X值传递给每个线程.

基本上我希望能够做到

ExecutorService threadPool = Executors.newFixedThreadPool(10);
for (int i = 0; i < X; i++) {
  threadPool.submit(new Runnable() {
    public void run() {         
      Function_to_run(i);
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激

java arrays multithreading

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

流:一次计算总数的差异

我有一个List<LedgerEntry> ledgerEntries,我需要计算creditAmount和debitAmount的总和.

class LedgerEntry{
 private BigDecimal creditAmount;
 private BigDecimal debitAmount;

 //getters and setters
}
Run Code Online (Sandbox Code Playgroud)

我实现了这个,

BigDecimal creditTotal = ledgeredEntries.stream().map(p ->p.getCreditAmount()).
reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal debitTotal = ledgeredEntries.stream().map(p ->p.getDebitAmount()).
reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal sumCreditDebit = creditTotal.subtract(debitTotal);
Run Code Online (Sandbox Code Playgroud)

这看起来像是在迭代List两次.有没有办法一次性完成这项工作,而无需两次蒸发列表?

java lambda bigdecimal java-8 java-stream

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

Thread.sleep和之前发生的关系是什么?

我写了一个简单的应用程序,它有主线程(生产者)和多个消费者线程.我想从主线程广播一条消息,所以所有的消费者线程都会收到它.但是,我有麻烦.我试图理解Thread.sleep如何与Happens-Before相关.这是我的一段代码:

import java.util.*;

public class PubSub {

    public static void main(String[] args) {
        List<Consumer> consumers = new ArrayList<>();

        for (int i = 0; i < 3; i++ ) {
            Consumer consumer = new Consumer(
                    "Consumer"  + i
            );
            consumer.start();

            consumers.add(consumer);
        }

        Scanner scanner = new Scanner(System.in);

        while(true) {
            String message = scanner.nextLine();

            for (Consumer consumer: consumers) {
                consumer.notify(message);
            }

        }
    }

    static class Consumer extends Thread {

        private Queue<String> queue;

        public Consumer(String name) {
            super(name);
            this.queue …
Run Code Online (Sandbox Code Playgroud)

java multithreading

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

在java中舍入到最接近的0.05的最佳方法

考虑到除食品外的所有商品均适用10%的税.此外,进口商品还需缴纳5%的附加税.

如果音乐CD的费用是12.49.该项目的税金为1.499.如果进口香水瓶的成本为47.50,则该项目的税率为7.125

有一项政策规定,项目的税收应四舍五入到最接近的0.05.因此,1.499应四舍五入为1.5,7.125应四舍五入为7.25.

使用逻辑可以实现上述舍入要求:

    (float) Math.ceil(taxAmount / 0.05f) * 0.05f;
Run Code Online (Sandbox Code Playgroud)

将税收添加到项目的成本中会给出:

音乐CD:12.49 + 1.5 = 13.99进口巧克力盒:47.50 + 7.25 = 54.65.

我面临以下输入的问题:

如果进口巧克力盒的成本是11.85,则税率为0.5925

使用舍入政策,四舍五入后的税率为0.6.

当我们添加11.85 + 0.6这两个都是浮点数时,我们得到结果为12.450001.与其他输入不同,此特定输入提供了大量小数位,而不是其他输出中的2位小数.

我尝试使用BigDecimal而不是float来存储所有值,并将比例设置为2位小数.这种方法的问题是,如果未指定舍入策略,bigDecimal将在某些情况下抛出异常.为BigDecimal提供舍入策略会导致项目的总成本和适用的税收使用提供给BigDecimal的舍入策略进行舍入,从而改变所需的输出.

java rounding bigdecimal

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

为什么最后一个对象在ArrayList中被多次复制?

我正在尝试将名为City类的对象添加到.这是该类的代码ArrayList

public class City {

    public static int x;
    public static int y;

    City(){
        Random rand = new Random();
        this.x = rand.nextInt(100)+1;
        this.y = rand.nextInt(100)+1;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的Main类的代码

    public static int N = 10;
    public static ArrayList<City> cities = new ArrayList<City>();

    public static void main(String[] args) {        

        for (int i=1; i<N; i++){            
            cities.add(new City());
        }       

        for (City c : cities)
            System.out.print("("+c.x+", "+c.y+")");
    }

}
Run Code Online (Sandbox Code Playgroud)

结果println总是相同的,似乎数组列表只存储其所有元素中添加的最后一个对象.

例如,我运行程序时得到的结果是:

(52, 93)(52, 93)(52, …
Run Code Online (Sandbox Code Playgroud)

java arraylist

4
推荐指数
2
解决办法
174
查看次数

为什么要使用null!=任何东西而不是任何东西!= null?

我见过我的老年人的各种代码,他们在很多地方使用过它.它有什么影响?为什么他们不能包括anything != null.对于下面的事情也是如此

"true".equals(x).

为什么会这样?

java null equals

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

这个课程遵循单一责任原则吗?

我最近被分配到一个公共方法中设计一个包含业务逻辑的类

 class MyClass
       private BusinessObject object;
       public BigInteger calculateCost() {
              //do calcualation using properties of object
       }
 }
Run Code Online (Sandbox Code Playgroud)

在方法calculateCost()中完成的计算完全没问题,但是对象的其他属性可以改变计算的方式.所以基于某些条件我应该可以应用折扣,有多个条件,每个都可以改变计算完成.

所以我通过创建如下的私有方法来应用这种简单的方法

     private calculateCost1() {
           //using object's properties calculate the cost
     }

     private calcualteCost2() {
           //using object's properties calculate the cost
     }
Run Code Online (Sandbox Code Playgroud)

并从公共方法中调用这些方法

      public BigInteger calculateCost() {
              //do calcualation using properties of object
              calculateCost1();
              calculateCost2();
      }
Run Code Online (Sandbox Code Playgroud)

这种设计的缺点是,如果我需要添加额外的计算方法,我将不得不更改MyClass,但我得到的反馈是它不遵循单一责任原则.我认为班级的唯一责任是计算成本,并且在添加额外的方法来根据业务对象的属性计算成本的方式不同之后,它仍然坚持SRP.

任何人都可以评论为什么这个设计不遵循SRP,如果它不是真的?

java oop design-patterns single-responsibility-principle

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