小编Gho*_*ica的帖子

我是否应该看到`for`循环中的计数器在其体内发生了变化?

我正在读别人的代码,他们分别在循环内增加for循环计数器,以及包括通常的事后想法.例如:

for( int y = 4; y < 12; y++ ) {
    // blah
    if( var < othervar ) {
        y++;
    }
    // blah
}
Run Code Online (Sandbox Code Playgroud)

根据其他人编写和阅读的大部分代码,我应该期待看到这个吗?

language-agnostic for-loop loop-counter

16
推荐指数
4
解决办法
1656
查看次数

StringBuffer和StringBuilder中的警告

我有一个StringBuffer在for循环外部和内部for循环初始化我连接一些字符串.

我收到了警告

'StringBuffer stringBuffer'可以声明为'StringBuilder'

字符串连接作为'stringbuilder.append()'调用的参数

然后我将StringBuffer更改为StringBuilder,因为它比StringBuffer快.现在我收到了警告

字符串连接作为'stringbuilder.append()'调用的参数

示例代码:

public static String stringConcat(String[] words) {
    StringBuffer stringBuffer = new StringBuffer();
    for (String word : words) {
        stringBuffer.append(word).append(" ");
    }
    return stringBuffer.toString();
}
Run Code Online (Sandbox Code Playgroud)

为什么我收到这些警告.

编辑实际代码:

stringBuffer.append(word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase()).append(" ");
Run Code Online (Sandbox Code Playgroud)

java stringbuilder android string-concatenation stringbuffer

16
推荐指数
2
解决办法
6145
查看次数

微服务和Web服务有什么区别?

我最接近找到实际差异的是这篇文章.

但我不明白是什么让我选择一个而不是另一个如果微服务也可以使用REST API并通过http进行通信.

我主要是不明白什么是微服务,是否可以来代替网络服务,而不是目的

将大型软件应用程序分解为松散耦合的模块

web-services microservices

16
推荐指数
3
解决办法
2万
查看次数

存储库模式是否遵循SOLID原则?

我正在对SOLID主体进行一些研究,并在Repository模式的实现中发现了一些问题.我将解释每一个问题,如果我错了,请纠正我.

问题1

存储库模式中断单一责任原则(S)

假设我们有一个定义为的接口

public interface IRepository<T> where T: IEntity
{ 
    IEnumerable<T> List { get; }
    void Add(T entity);
    void Delete(T entity);
    void Update(T entity);
    T FindById(int Id);
}
Run Code Online (Sandbox Code Playgroud)

显然它违反了单一责任原则,因为当我们实现这个接口时,在一个类中,我们将命令和查询都放在一起.这不是预期的.

问题2

存储库模式中断接口隔离原则(I)

假设我们有2个以上接口的实现.

第一次实施

CustomerRepository : IRepository<Customer>
{
   //All Implementation
}
Run Code Online (Sandbox Code Playgroud)

第二次实施

ProductRepository : IRepository<Product>
{
   //All Implementation except Delete Method. So Delete Method Will be
   void Delete (Product product){
       throw Not Implement Exception!
   }
}
Run Code Online (Sandbox Code Playgroud)

并且根据ISP"没有客户应该被迫依赖它不使用的方法." 所以我们看到它显然也违反了ISP.

所以,我的理解是Repository模式不遵循SOLID主体.你怎么看?我们为什么要选择这种违反校长的模式呢?需要你的意见.

c# asp.net asp.net-mvc design-patterns solid-principles

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

BigDecimal.add奇怪的行为

BigDecimal.add当一个参数具有大指数(9位数)时,方法需要很长时间,而第二个参数具有不同长度的指数.我已经等了5分钟以上,而且还在继续.

这是代码:

@Test
public void testAddBig() throws Exception {
    MathContext mc = new MathContext(10, RoundingMode.HALF_UP);
    BigDecimal v1 = new BigDecimal("1E+100000000", mc);
    BigDecimal v2 = new BigDecimal("1", mc);
    System.out.println(v1.add(v2));
}
Run Code Online (Sandbox Code Playgroud)

这是线程转储的一部分:

at java.math.BigInteger.square(BigInteger.java:1884)
at java.math.BigInteger.squareKaratsuba(BigInteger.java:1975)
at java.math.BigInteger.square(BigInteger.java:1888)
at java.math.BigInteger.squareToomCook3(BigInteger.java:2011)
at java.math.BigInteger.square(BigInteger.java:1890)
at java.math.BigInteger.squareToomCook3(BigInteger.java:2006)
at java.math.BigInteger.square(BigInteger.java:1890)
at java.math.BigInteger.squareToomCook3(BigInteger.java:2012)
at java.math.BigInteger.square(BigInteger.java:1890)
at java.math.BigInteger.squareToomCook3(BigInteger.java:2010)
at java.math.BigInteger.square(BigInteger.java:1890)
at java.math.BigInteger.squareToomCook3(BigInteger.java:2006)
at java.math.BigInteger.square(BigInteger.java:1890)
at java.math.BigInteger.squareToomCook3(BigInteger.java:2012)
at java.math.BigInteger.square(BigInteger.java:1890)
at java.math.BigInteger.squareToomCook3(BigInteger.java:2011)
at java.math.BigInteger.square(BigInteger.java:1890)
at java.math.BigInteger.pow(BigInteger.java:2263)
at java.math.BigDecimal.bigTenToThe(BigDecimal.java:3543)
at java.math.BigDecimal.bigMultiplyPowerTen(BigDecimal.java:4508)
at java.math.BigDecimal.add(BigDecimal.java:4443)
at java.math.BigDecimal.add(BigDecimal.java:1289)
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?这是一个错误吗?

java fixed-point bigdecimal

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

您是否有Java 8 Functional接口列表(不是java.util.function中列出的接口)?

我试图看看是否有任何方法可以获得Java 8中作为功能接口的所有接口的列表.我不是在谈论这个页面上的列表:

https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html

相反,我在谈论像Comparator,FileFilter和Runnable这样的接口--API文档显示的接口是这样的功能:

@FunctionalInterface公共接口Runnable

这些地方有完整的清单吗?

谢谢!

java java-8 functional-interface

13
推荐指数
4
解决办法
4331
查看次数

Java HotSpot(TM)客户端共享与不共享

我正在查看我的JDK安装,我发现两个安装之间存在差异:

java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) Client VM (build 25.121-b13, mixed mode)
Run Code Online (Sandbox Code Playgroud)

VS

java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) Client VM (build 25.121-b13, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)

我想知道sharingnot sharing国家之间的区别是什么.

除了"速度差异"之外,我找不到一个好的答案,但没有解释为什么/这是什么.

java

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

为什么我不能捕获抛出泛型的调用的已检查异常?

我正在研究一个应该调用任意代码的小助手(以lambda形式传入).帮助器应该捕获某些异常,并将它们放在一些包装器中.我的"自己的"例外不应该被包裹,而是重新抛出.

我想出了这段代码:

@FunctionalInterface
interface Processable<T, X extends Throwable> {
    public T apply() throws X;
}

class MyCheckedException extends Exception { ... }
class MyCheckedExceptionWrapper extends MyCheckedException { ... }

public class MyExceptionLogger<T, X extends Throwable> {
    public T process(Processable<T, X> processable) throws MyCheckedException {
        try {
            return processable.apply();
        } catch (MyCheckedException thrown) { // this line isn't accepted
            throw thrown;
        } catch (Exception | LinkageError thrown) {
            throw new MyCheckedExceptionWrapper(thrown);
        } catch (Throwable thrown) {
           ... just log
          return null; …
Run Code Online (Sandbox Code Playgroud)

java generics exception-handling exception try-catch

13
推荐指数
2
解决办法
192
查看次数

Java继承:将列表限制为子类对象

我们假设我有3个类:汽车,敞篷车和车库.

汽车:

public class Car {    
    private String name;
    private String color;

    public Car(String name, String color) {
        this.name = name;
        this.color = color;
    }    
    //Getters
}
Run Code Online (Sandbox Code Playgroud)

敞篷继承自汽车:

public class Convertible extends Car{
    private boolean roof;

    public Convertible(String name, String color, boolean roof) {
        super(name, color);
        this.roof = roof;
    }

    public boolean isRoof() {
        return roof;
    }
}
Run Code Online (Sandbox Code Playgroud)

车库存储汽车列表:

public class Garage {
    private int capacity;
    private List<Car> cars = new LinkedList<Car>();

    //Setter for capacity
}
Run Code Online (Sandbox Code Playgroud)

我怎么能创建一个只能存储Convertibles 的Garage被调用的子类 …

java generics collections inheritance list

12
推荐指数
2
解决办法
731
查看次数

在使用getOrDefault()之后我应该使用put()还是putIfAbsent()?

Java8介绍那些漂亮的方法getOrDefault()putIfAbsent(),让写代码,如:

Map<Foo, List<Bar>> itemsByFoo = ...
List<Bar> bars = itemsByFoo.getOrDefault(key, new ArrayList<>());
bars.add(someNewBar);
Run Code Online (Sandbox Code Playgroud)

现在我想知道是否有很好的事实理由:

itemsByFoo.put(key, bars);
Run Code Online (Sandbox Code Playgroud)

要么

itemsByFoo.putIfAbsent(key, bars);
Run Code Online (Sandbox Code Playgroud)

两者都有效:

  • 选项1时可能做了很多不必要的"放"的呼叫将元素添加到列表中经常发生
  • 为新键添加新条目占主导地位时,option2可能会执行大量不必要的"containsKey"调用

那么:选择1或选项2"总是"的充分理由是什么?

java collections dictionary java-8

12
推荐指数
2
解决办法
1479
查看次数