小编aio*_*obe的帖子

什么是好的"错误检查"模式(Java)?

我将解释输入错误检查的含义.

假设你有一个功能doSomething(x).

如果函数成功doSomething完成某事并且什么都不返回.但是,如果有错误,我希望收到通知.这就是错误检查的意思.

一般来说,我一直在寻找检查错误的最佳方法.我想到了以下解决方案,每个解决方案都存在潜在问题.

  1. 标记错误检查.如果doSomething(x)完成成功返回null.否则,它返回一个布尔值或错误字符串.问题:副作用.

  2. 抛出异常.doSomething(x)遇到错误时抛出异常.问题:如果您仅对参数执行错误检查,则抛出IllegalArgumentException似乎不合适.

  3. 在函数调用之前验证输入.如果错误检查仅用于函数的参数,则可以在调用函数之前调用验证器doSomething(x)函数.问题:如果类的客户端在调用之前忘记调用验证器函数doSomething(x)怎么办?

我经常遇到这个问题,并且非常感谢任何帮助或正确方向上的一点.

java error-handling

17
推荐指数
2
解决办法
8776
查看次数

为什么NULL/0是对象的非法内存位置?

我理解NULLC/C++中常量的用途,我理解它需要在内部以某种方式表示.

我的问题是:对于C/C++中的对象,0地址是否是无效的内存位置有一些根本原因吗?或者我们理论上是因为这次预订而"浪费"一个字节的内存?

c c++ null memory-management

16
推荐指数
6
解决办法
7464
查看次数

如何避免使用大型if语句和instanceof

动物

public abstract class Animal {
 String name;

 public Animal(String name) {
  this.name = name;
 }

}
Run Code Online (Sandbox Code Playgroud)

狮子

public class Lion extends Animal {

 public Lion(String name) {
  super(name);
  // TODO Auto-generated constructor stub
 }

 public void roar() {
  System.out.println("Roar");
 }
}
Run Code Online (Sandbox Code Playgroud)

鹿

public class Deer extends Animal {

 public Deer(String name) {
  super(name);
 }

 public void runAway() {
  System.out.println("Running...");
 }

}
Run Code Online (Sandbox Code Playgroud)

TestAnimals

public class TestAnimals {
 public static void main(String[] args) {
  Animal lion = new Lion("Geo");
  Animal deer1 …
Run Code Online (Sandbox Code Playgroud)

java iteration casting

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

我可以使用for-comprehenion/yield在Scala中创建地图吗?

我可以"屈服"成地图吗?

我试过了

val rndTrans = for (s1 <- 0 to nStates;
                    s2 <- 0 to nStates
                        if rnd.nextDouble() < trans_probability)
                            yield (s1 -> s2);
Run Code Online (Sandbox Code Playgroud)

(而,不是->)但我得到了错误

TestCaseGenerator.scala:42: error: type mismatch;
 found   : Seq.Projection[(Int, Int)]
 required: Map[State,State]
    new LTS(rndTrans, rndLabeling)
Run Code Online (Sandbox Code Playgroud)

我明白为什么,但我看不出如何解决这个问题: - /

scala for-comprehension scala-2.7

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

Java是通过引用还是按值返回

我有一个HashMap:

private HashMap<String, Integer> cardNumberAndCode_ = new HashMap<String, Integer>();
Run Code Online (Sandbox Code Playgroud)

后来我这样做:

Integer balance = cardNumberBalance_.get(cardNumber);
System.out.println(balance);
balance = 10;
Integer newBalance = cardNumberBalance_.get(cardNumber);
System.out.println(newBalance);
Run Code Online (Sandbox Code Playgroud)

首先它打印1000,第二次打印1000,值不变.为什么java按值而不是通过引用返回Integer?

java reference hashmap

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

Java NIO:transferFrom直到流结束

我正在玩NIO库.我正在尝试在端口8888上侦听连接,一旦接受连接,就从该通道转储所有内容somefile.

我知道该怎么做ByteBuffers,但我想让它与所谓的超高效工作FileChannel.transferFrom.

这就是我得到的:

ServerSocketChannel ssChannel = ServerSocketChannel.open();
ssChannel.socket().bind(new InetSocketAddress(8888));

SocketChannel sChannel = ssChannel.accept();
FileChannel out = new FileOutputStream("somefile").getChannel();

while (... sChannel has not reached the end of the stream ...)     <-- what to put here?
    out.transferFrom(sChannel, out.position(), BUF_SIZE);

out.close();
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:如何表达" transferFrom某个频道,直到到达流末端"


编辑:将1024更改为BUF_SIZE,因为所使用的缓冲区大小与问题无关.

java nio filechannel socketchannel

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

为什么DecimalFormat允许字符作为后缀?

我正在使用DecimalFormat解析/验证用户输入.不幸的是,它在解析时允许字符作为后缀.

示例代码:

try {
  final NumberFormat numberFormat = new DecimalFormat();
  System.out.println(numberFormat.parse("12abc"));
  System.out.println(numberFormat.parse("abc12"));
} catch (final ParseException e) {
  System.out.println("parse exception");
}
Run Code Online (Sandbox Code Playgroud)

结果:

12
parse exception
Run Code Online (Sandbox Code Playgroud)

我实际上期望两者都有一个解析异常.如何判断DecimalFormat不允许输入"12abc"

java formatting

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

在Scala中反转/转置一对多地图

将a Map[A, Set[B]]变为a 的最佳方法是Map[B, Set[A]]什么?

例如,我该怎么转

Map(1 -> Set("a", "b"),
    2 -> Set("b", "c"),
    3 -> Set("c", "d"))
Run Code Online (Sandbox Code Playgroud)

进入

Map("a" -> Set(1),
    "b" -> Set(1, 2),
    "c" -> Set(2, 3),
    "d" -> Set(3))
Run Code Online (Sandbox Code Playgroud)

(我在这里只使用不可变集合.而我真正的问题与字符串或整数无关.:)

collections scala map

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

具有泛型重载的Java擦除(不覆盖)

我的域名中有FinanceRequests和CommisionTransactions.如果我有一个FinanceRequests列表,每个FinanceRequest可能包含多个需要回收的CommisionTransactions.不要担心这是怎么做到的.

下面的课程(非常底层)让我感觉自己的模糊和温暖,因为它很好地重用现有的代码.一个问题类型擦除.

public void clawBack(Collection<FinanceRequest> financeRequestList)  
public void clawBack(Collection<CommissionTrns> commissionTrnsList)
Run Code Online (Sandbox Code Playgroud)

它们在擦除后都具有相同的签名,即:

Collection<FinanceRequest> --> Collection<Object>  
Collection<CommissionTrns> --> Collection<Object>  
Run Code Online (Sandbox Code Playgroud)

所以eclipse抱怨说:
方法clawBack(Collection)具有相同的擦除clawBack(Collection)作为类型为CommissionFacade的另一种方法

有没有重组这个的建议,以便它仍然是一个优秀的解决方案,可以很好地重用代码?


public class CommissionFacade
{
    /********FINANCE REQUESTS****************/
    public void clawBack(FinanceRequest financeRequest)
    {
        Collection<CommissionTrns> commTrnsList = financeRequest.getCommissionTrnsList();           
        this.clawBack(commTrnsList);
    }

    public void clawBack(Collection<FinanceRequest> financeRequestList)
    {
        for(FinanceRequest finReq : financeRequestList) 
        {
            this.clawBack(finReq);
        }           
    }

    /********COMMISSION TRANSACTIOS****************/
    public void clawBack(CommissionTrns commissionTrns)
    {
        //Do clawback for single CommissionTrns         
    }

    public void clawBack(Collection<CommissionTrns> commissionTrnsList)
    {
        for(CommissionTrns commTrn : commissionTrnsList) 
        {
            this.clawBack(commTrn);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

java generics overloading type-erasure

15
推荐指数
2
解决办法
8103
查看次数

Java中的无符号字节

默认情况下,Java中的字节是签名的.我在其他帖子上看到,具有无符号字节的变通方法类似于:int num = (int) bite & 0xFF

有人可以向我解释为什么会这样,并将有符号的字节转换为无符号字节,然后转换为相应的整数?ANDing一个字节与11111111导致相同的字节 - 对吗?

java byte

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