小编And*_*lov的帖子

Java中的True-way解决方案:解析2个字符串中的2个数字,然后返回它们的总和

相当愚蠢的问题.鉴于代码:

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()签名的一部分.此外,据我所知,未经检查的异常的想法只是表示程序的实现是不正确的,甚至更多,捕获未经检查的异常是一个坏主意,因为它就像在运行时修复坏程序.

请有人澄清是否:

  1. 我应该指定NumberFormatException为方法签名的一部分.
  2. 我应该定义自己检查的exception(BadDataException),NumberFormatException在方法内部处理并重新抛出它BadDataException.
  3. 我应该定义自己检查的异常(BadDataException),像正则表达式一样验证两个字符串,BadDataException如果它不匹配则抛出我的字符串.
  4. 你的想法?

更新:

想象一下,它不是一个开源框架,你应该出于某种原因使用它.你看看方法的签名并思考 - "好吧,它永远不会抛出".然后,有一天,你有一个例外.这是正常的吗?

更新2:

有一些评论说我sum(String, String)的设计不好.我绝对同意,但对于那些认为如果我们有好的设计就不会出现原始问题的人来说,这是一个额外的问题:

问题定义如下:您有一个数据源,其中数字存储为Strings.这个源可能是XML文件,网页,带有2个编辑框的桌面窗口,等等.

你的目标是实现采用这些2 String秒的逻辑,将它们转换为ints并显示消息框,说"总和是xxx".

无论您使用什么方法来设计/实现它,您都将拥有以下2点内部功能: …

java parsing exception

84
推荐指数
3
解决办法
4803
查看次数

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

有没有办法将视图放在其父布局之外?

这是关于Android布局的问题.这是我急切想要得到的:

布局

深灰色是LinearLayout.橙色是布局X,然后绿色是FrameLayout.我需要将Green放在其父级布局X之外.所描述的布局层次结构不能更改.唯一的选择是布局X - 它可以是你想要的任何东西.

有任何想法吗?

android android-layout

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

resharper可以导航到一个方法吗?

我知道如何导航到文件或类,但我可以导航到类的方法吗?

哦,并说我正在查看另一个班级的文件

resharper

24
推荐指数
3
解决办法
6473
查看次数

DIP vs. DI与IoC

大概2个月我一直在阅读这三个主题我能找到的所有东西,我还不确定我是否已经找到了.

  1. 依赖倒置原则.意味着你应该始终只依赖于接口而不是它们的实现.如果你的班级依赖于任何其他班级,这是不好的,因为它取决于第二类的细节.如果你的类依赖于接口,这绝对可以,因为这种依赖只意味着你的类需要一些抽象的东西,它可以做一些具体的事情而你并不真正关心它的做法.

    由于"DIP"中的P代表"原理",我应该用这种方式定义:依赖性倒置原则是一个原则,要求所有代码的实体仅依赖于他们真正需要的细节.

    通过"他们真正需要的细节",我指的是最简单的情况下的接口.我还使用"实体"这个词来强调DIP也适用于程序和其他任何东西,不仅适用于类.

  2. 依赖注入.它仅适用于启用DI的实体.启用DI的实体是一个"开放"的实体,用于配置其行为而不更改其内部.注入有两种基本类型(在谈论类时):

    • 构造函数注入 - 当您将所有必需的"抽象细节"传递给对象时,就在它即将构建的那一刻.
    • Setter Injection - 在您创建对象后"澄清"所需方面.

    因此,定义可能如下:依赖注入是将"抽象细节"传递给真正需要这些细节的实体的过程.

    通过"真正需要这些细节",我指的是最简单的情况下的接口."实体"一词一如既往地用来强调DI也适用于程序和其他任何东西.

  3. 控制反转.它通常被定义为"库和框架之间的差异","以程序编程中的任何一种方式编写程序"等等.这对我来说是最令人困惑的事情.我认为这里的主要想法只是启动任何行动.要么"随时随地"(程序方式)做某事,要么"等"直到有人问你(IoC方式).

    我的定义是:IoC是程序执行流程的一个属性,当你不要做任何事情,直到他们要求你这样做.

    这听起来就像"好莱坞原则",但我相信"好莱坞原则"和IoC都是完全相同的想法.

我理解吗?

architecture theory dependency-injection inversion-of-control

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

类范围的枚举

我有一个带有枚举的c ++类,我想模仿它boost::python,以便我可以用MyClass.valuepython 编写.boost::python::class_没有enum_方法,我正在寻找解决方法.

  1. 我第一次尝试使用lambdas

    MyClass{
        enum{value1,value2};
    };
    
    class_<MyClass>("MyClass").add_property("value1",&[](){return value1;}).staticmethod("value1");
    
    Run Code Online (Sandbox Code Playgroud)

    这给出了编译器错误(in get_signaturefor add_property).我知道我可以为每个值创建getter方法,但这对我来说似乎很尴尬(打字方式).

  2. 使用attr:

    auto classObj=class_<MyClass>("MyClass");
    classObj.attr("value1")=(int)value1;
    classObj.attr("value2")=(int)value2;
    
    Run Code Online (Sandbox Code Playgroud)

    但它不能像.def其他方法一样链接返回对实例的引用.

有更优雅的解决方案吗?

c++ enums static-members boost-python

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

使用T-SQL备份/恢复数据库(MSSQL2005,2008)

我需要能够使用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\很好.

t-sql

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

当socket.close()抛出Java时我能做些什么?

一周前开始学习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)

这段代码是一个单独的线程中执行,所以我 …

java sockets multithreading exception

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

Java中接口/抽象类的动态实现

什么是构建接口和/或抽象类的动态实现的事实上的解决方案?我基本上想要的是:

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)

java proxy dynamic dynamic-proxy

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

使用"this"指针而不使用它有什么区别吗?

使用"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吗?

谢谢!:-)

c++ performance this

11
推荐指数
3
解决办法
2847
查看次数