相当愚蠢的问题.鉴于代码:
public static int sum(String a, String b) /* throws? WHAT? */ {
int x = Integer.parseInt(a); // throws NumberFormatException
int y = Integer.parseInt(b); // throws NumberFormatException
return x + y;
}
Run Code Online (Sandbox Code Playgroud)
你能告诉它是不是很好的Java?我所说的是,NumberFormatException
是一个未经检查的例外.您不必将其指定为sum()
签名的一部分.此外,据我所知,未经检查的异常的想法只是表示程序的实现是不正确的,甚至更多,捕获未经检查的异常是一个坏主意,因为它就像在运行时修复坏程序.
请有人澄清是否:
NumberFormatException
为方法签名的一部分.BadDataException
),NumberFormatException
在方法内部处理并重新抛出它BadDataException
.BadDataException
),像正则表达式一样验证两个字符串,BadDataException
如果它不匹配则抛出我的字符串.更新:
想象一下,它不是一个开源框架,你应该出于某种原因使用它.你看看方法的签名并思考 - "好吧,它永远不会抛出".然后,有一天,你有一个例外.这是正常的吗?
更新2:
有一些评论说我sum(String, String)
的设计不好.我绝对同意,但对于那些认为如果我们有好的设计就不会出现原始问题的人来说,这是一个额外的问题:
问题定义如下:您有一个数据源,其中数字存储为String
s.这个源可能是XML文件,网页,带有2个编辑框的桌面窗口,等等.
你的目标是实现采用这些2 String
秒的逻辑,将它们转换为int
s并显示消息框,说"总和是xxx".
无论您使用什么方法来设计/实现它,您都将拥有以下2点内部功能: …
基于图形的数据库(http://neo4j.org/)和面向对象的数据库(http://www.db4o.com/)之间有什么区别?
database db4o neo4j graph-databases object-oriented-database
这是关于Android布局的问题.这是我急切想要得到的:
深灰色是LinearLayout.橙色是布局X,然后绿色是FrameLayout.我需要将Green放在其父级布局X之外.所描述的布局层次结构不能更改.唯一的选择是布局X - 它可以是你想要的任何东西.
有任何想法吗?
大概2个月我一直在阅读这三个主题我能找到的所有东西,我还不确定我是否已经找到了.
依赖倒置原则.意味着你应该始终只依赖于接口而不是它们的实现.如果你的班级依赖于任何其他班级,这是不好的,因为它取决于第二类的细节.如果你的类依赖于接口,这绝对可以,因为这种依赖只意味着你的类需要一些抽象的东西,它可以做一些具体的事情而你并不真正关心它的做法.
由于"DIP"中的P代表"原理",我应该用这种方式定义:依赖性倒置原则是一个原则,要求所有代码的实体仅依赖于他们真正需要的细节.
通过"他们真正需要的细节",我指的是最简单的情况下的接口.我还使用"实体"这个词来强调DIP也适用于程序和其他任何东西,不仅适用于类.
依赖注入.它仅适用于启用DI的实体.启用DI的实体是一个"开放"的实体,用于配置其行为而不更改其内部.注入有两种基本类型(在谈论类时):
因此,定义可能如下:依赖注入是将"抽象细节"传递给真正需要这些细节的实体的过程.
通过"真正需要这些细节",我指的是最简单的情况下的接口."实体"一词一如既往地用来强调DI也适用于程序和其他任何东西.
控制反转.它通常被定义为"库和框架之间的差异","以程序编程中的任何一种方式编写程序"等等.这对我来说是最令人困惑的事情.我认为这里的主要想法只是启动任何行动.要么"随时随地"(程序方式)做某事,要么"等"直到有人问你(IoC方式).
我的定义是:IoC是程序执行流程的一个属性,当你不要做任何事情,直到他们要求你这样做.
这听起来就像"好莱坞原则",但我相信"好莱坞原则"和IoC都是完全相同的想法.
我理解吗?
architecture theory dependency-injection inversion-of-control
我有一个带有枚举的c ++类,我想模仿它boost::python
,以便我可以用MyClass.value
python 编写.boost::python::class_
没有enum_
方法,我正在寻找解决方法.
我第一次尝试使用lambdas
MyClass{
enum{value1,value2};
};
class_<MyClass>("MyClass").add_property("value1",&[](){return value1;}).staticmethod("value1");
Run Code Online (Sandbox Code Playgroud)
这给出了编译器错误(in get_signature
for add_property
).我知道我可以为每个值创建getter方法,但这对我来说似乎很尴尬(打字方式).
使用attr
:
auto classObj=class_<MyClass>("MyClass");
classObj.attr("value1")=(int)value1;
classObj.attr("value2")=(int)value2;
Run Code Online (Sandbox Code Playgroud)
但它不能像.def
其他方法一样链接返回对实例的引用.
有更优雅的解决方案吗?
我需要能够使用tsql备份和恢复我的数据库.我正在使用的方法是:
-- backup
backup database testdb1 to disk='c:\testdb1.bak'
-- restore
alter database testdb1 set single_user with rollback immediate
drop database testdb1
restore database testdb1 from disk='c:\testdb1.bak'
Run Code Online (Sandbox Code Playgroud)
这工作正常,但需要在现有文件c:\testdb1.bak
.只要我在本地安装了SQL服务器,这不是问题,但如果我远程连接到服务器该怎么办?任何摆脱这一要求的解决方案?
对我来说,这个文件的名称和路径是什么并不重要,我只需要确保如果我的alter脚本出错,我就能恢复数据库.
谢谢.
更新
问题是c:\
某些版本的Windows禁止在根目录下创建文件.使用C:\1\
很好.
一周前开始学习java,并决定学习使用异常的正确方法.Java真的让我很生气,因为它指定了方法可以作为其签名的一部分抛出的异常.
我目前正在尝试为客户端 - 服务器应用程序实现多线程服务器.我很惊讶事实socket.close()
可以抛出IOException.问题是,如果它发生了我该怎么办?
...
final Socket socket = .... // at this point I know that I have a good socket
try {
..... // communicating with someone on that side....
} catch(IOException e) {
// communication failed
// this fact is useful, I can log it
// and will just hang up
} finally {
try {
socket.close(); // bye-bye
} catch(IOException e) {
// anything but logging I can do here?
}
}
...
Run Code Online (Sandbox Code Playgroud)
这段代码是一个单独的线程中执行,所以我 …
什么是构建接口和/或抽象类的动态实现的事实上的解决方案?我基本上想要的是:
interface IMyEntity {
int getValue1();
void setValue1(int x);
}
...
class MyEntityDispatcher implements WhateverDispatcher {
public Object handleCall(String methodName, Object[] args) {
if(methodName.equals("getValue1")) {
return new Integer(123);
} else if(methodName.equals("setValue")) {
...
}
...
}
}
...
IMyEntity entity = Whatever.Implement<IMyEntity>(new MyEntityDispatcher());
entity.getValue1(); // returns 123
Run Code Online (Sandbox Code Playgroud) 使用"this"指针是否在运行时向程序添加了另一个操作?
只是举个例子来更好地解释这个问题:
class C
{
public:
void set_x(int val){ x = val; }
void set_this_x(int val){ this->x = val; }
private:
int x;
};
Run Code Online (Sandbox Code Playgroud)
在运行时,函数"C :: set_x()"执行的操作比"C :: set_this_x()"少1吗?
谢谢!:-)