小编Hoo*_*pje的帖子

如何记录Java方法的(简单)前提条件?

通常情况下,方法对其参数施加约束,而类型系统无法对其进行描述.例如,方法可能要求某些参数为非null,或者某些int类型的参数为正数.可能还存在更复杂的前提条件,例如之前调用某个方法,或者某个对象处于某种状态.在Javadoc中记录这个的最佳方法是什么?

例如,假设我有以下公共库函数,其中参数不能为负数:

public void foo(int bar) {
    if (bar < 0) {
        throw new IllegalArgumentException("Negative bars cannot be food.");
    }
    ...
} 
Run Code Online (Sandbox Code Playgroud)

我希望以这样的方式记录它,使其从文档文本的其余部分"脱颖而出",以便文档读者立即知道它们必须查看的位置.目前,我通过向throwsJavadoc 添加子句来实现此目的:

/**
 * Foos a bar.
 * @param bar  the bar to be food
 * @throws IllegalArgumentException  if bar is negative
 */
public void foo(int bar) {
    ...
Run Code Online (Sandbox Code Playgroud)

但是,这会将异常抛出到方法的规范中.现在,库用户可能在其代码中依赖于此行为.因此,如果我想以允许负参数的方式更改下一版本中的方法,我可能会破坏客户端的代码.

是否有任何最佳实践来记录Javadoc中的这类内容?我想到了:

  • 在文档文本中描述如果参数为负,则该方法具有未定义的行为.但是,这并没有真正脱颖而出,因此许多图书馆用户可能会错过它.
  • 使用注释(public void foo(@NonNegative int bar)).但是,对于此,标准的注释集将是理想的,并且该标准集似乎不存在.

java javadoc

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

为什么`List`在有`forEach`时没有`map`默认方法?

我已经研究了在Java 8中编写基于流的代码,并注意到了一种模式,即我经常有一个列表,但需要通过对每个元素应用一个简单的映射将其转换为另一个列表.写完.stream().map(...).collect(Collections.toList())又一次,我记得我们已经List.forEach找到了,List.map但显然这个默认方法还没有添加.

为什么List.map()(EDIT:或List.transform()or List.mumble())没有添加(这是一个历史问题),是否有一个简单的速记使用默认运行时库中的其他方法做同样的事情,我没有注意到?

java java-8

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

切换booleans组合的构造

假设我有n个布尔值,其中n是一个相对较小的数字(3-5左右).假设值是类的属性,每个属性都可以独立设置或取消设置.因此,有2种ñ可能的组合.现在我想以类似开关的方式区分这些组合.目前,我通常做这样的事情:

int mask = (bool1 ? 1 : 0) +
           (bool2 ? 2 : 0) +
           (bool3 ? 4 : 0) +
           ... ;
switch (mask) {
    case 0b000:
       // all variables false
    case 0b001:
       // only bool1 true
    case 0b011:
       // only bool1 and bool2 true
    ...
}
Run Code Online (Sandbox Code Playgroud)

这样可以,但我发现它并不优雅.对于这样的案例,是否有一些最佳实践(Java)或Java习惯用法?

java idioms

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

scala是否比java在JVM上运行更快?

在许多网站中,我研究过scala比Java更快.我编写了代码来测试这两者之间的时差,但Scala需要更多时间.我不知道我是否犯了任何错误.如果我错了,请纠正我.

Scala代码

package com.first

import java.util.ArrayList

object Word extends App{
  val absoluteResult = new ArrayList[Any]()
  val before = System.currentTimeMillis()
  var i =0
  while (i<10000) {
    i = i+1
    val result = List("foo", 23, true).iterator
    while (result.hasNext) {
      absoluteResult.add(foo(result.next))
    }
  }
  println("Took : "+(System.currentTimeMillis() - before)
      +" ms, number of elements : "+absoluteResult.size)

  def foo(obj : Any) =
    obj match {
          case _:String => "String"
          case _:Boolean => "Boolean"
          case _:Integer => "Integer"
          case _ => throw new IllegalArgumentException()
    }
} …
Run Code Online (Sandbox Code Playgroud)

java functional-programming scala

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

如何从循环中删除if else条件?

我有一个类似于下面的代码片段,

public ArrayList getReport(reportJDOList,accountType)
{
    String abc = "";

    for(ReportJDO reportJDO : reportJDOList)
    {
        if(accountType.equals("something")
           abc = reportJDO.getThis();
        else
           abc = reportJDO.getThat();

        //somecode goes here
    }

    returning List;
}
Run Code Online (Sandbox Code Playgroud)

正如我在迭代之前知道accountType的值,我不希望对列表中的每个条目进行此检查,因为如果一个实例的reportJDOList的大小为10000,它将导致大量检查.我们如何消除这件事?提前致谢 :)

java iteration refactoring

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

BigDecimal除法,带有大量小数位

我的问题很简单

BigDecimal我想这样做:

public static void main (String [] args) {
    System.out.println(new BigDecimal(1).divide(new BigDecimal(3));
}
Run Code Online (Sandbox Code Playgroud)

我希望结果是这样的:0.333333333333333333333333333333333....... 而不是0.33340.33

java bigdecimal

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

为什么int answer = generator.nextInt(10)+ 1; 只产生1到10之间的数字?

我不明白为什么它不会产生超过11.

这是我的测试代码:

import java.util.Random;

public class randomNumberTest
{
    public static void main(String[] args)
    {
         Random rn = new Random();
         //tests random number generator (between 1(inc) and 10(excl))
         for(int i =0; i < 100; i++)
         {
             int answer = rn.nextInt(10) + 1;
             System.out.println(answer);
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

java random next

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