我正在读别人的代码,他们分别在循环内增加for循环计数器,以及包括通常的事后想法.例如:
for( int y = 4; y < 12; y++ ) {
// blah
if( var < othervar ) {
y++;
}
// blah
}
Run Code Online (Sandbox Code Playgroud)
根据其他人编写和阅读的大部分代码,我应该期待看到这个吗?
我有一个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
我最接近找到实际差异的是这篇文章.
但我不明白是什么让我选择一个而不是另一个如果微服务也可以使用REST API并通过http进行通信.
我主要是不明白什么是微服务,是否可以来代替网络服务,而不是目的
将大型软件应用程序分解为松散耦合的模块
我正在对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主体.你怎么看?我们为什么要选择这种违反校长的模式呢?需要你的意见.
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 8中作为功能接口的所有接口的列表.我不是在谈论这个页面上的列表:
https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
相反,我在谈论像Comparator,FileFilter和Runnable这样的接口--API文档显示的接口是这样的功能:
@FunctionalInterface公共接口Runnable
这些地方有完整的清单吗?
谢谢!
我正在查看我的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)
我想知道sharing和not sharing国家之间的区别是什么.
除了"速度差异"之外,我找不到一个好的答案,但没有解释为什么/这是什么.
我正在研究一个应该调用任意代码的小助手(以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) 我们假设我有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被调用的子类 …
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或选项2"总是"的充分理由是什么?
java ×7
collections ×2
generics ×2
java-8 ×2
android ×1
asp.net ×1
asp.net-mvc ×1
bigdecimal ×1
c# ×1
dictionary ×1
exception ×1
fixed-point ×1
for-loop ×1
inheritance ×1
list ×1
loop-counter ×1
stringbuffer ×1
try-catch ×1
web-services ×1