我将解释输入错误检查的含义.
假设你有一个功能doSomething(x).
如果函数成功doSomething完成某事并且什么都不返回.但是,如果有错误,我希望收到通知.这就是错误检查的意思.
一般来说,我一直在寻找检查错误的最佳方法.我想到了以下解决方案,每个解决方案都存在潜在问题.
标记错误检查.如果doSomething(x)完成成功返回null.否则,它返回一个布尔值或错误字符串.问题:副作用.
抛出异常.doSomething(x)遇到错误时抛出异常.问题:如果您仅对参数执行错误检查,则抛出IllegalArgumentException似乎不合适.
在函数调用之前验证输入.如果错误检查仅用于函数的参数,则可以在调用函数之前调用验证器doSomething(x)函数.问题:如果类的客户端在调用之前忘记调用验证器函数doSomething(x)怎么办?
我经常遇到这个问题,并且非常感谢任何帮助或正确方向上的一点.
我理解NULLC/C++中常量的用途,我理解它需要在内部以某种方式表示.
我的问题是:对于C/C++中的对象,0地址是否是无效的内存位置有一些根本原因吗?或者我们理论上是因为这次预订而"浪费"一个字节的内存?
动物
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) 我可以"屈服"成地图吗?
我试过了
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)
我明白为什么,但我看不出如何解决这个问题: - /
我有一个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?
我正在玩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,因为所使用的缓冲区大小与问题无关.
我正在使用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"?
将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)
(我在这里只使用不可变集合.而我真正的问题与字符串或整数无关.:)
我的域名中有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中的字节是签名的.我在其他帖子上看到,具有无符号字节的变通方法类似于:int num = (int) bite & 0xFF
有人可以向我解释为什么会这样,并将有符号的字节转换为无符号字节,然后转换为相应的整数?ANDing一个字节与11111111导致相同的字节 - 对吗?
java ×7
scala ×2
byte ×1
c ×1
c++ ×1
casting ×1
collections ×1
filechannel ×1
formatting ×1
generics ×1
hashmap ×1
iteration ×1
map ×1
nio ×1
null ×1
overloading ×1
reference ×1
scala-2.7 ×1
type-erasure ×1