3

在 PHP 中,我真的经常使用这个:

$conn_sets = array();
$conn_sets['login'] = "aaa";
$conn_sets['pass'] = "bbb";

如何在 JAVA 1.6 中做同样的事情。我试图这样做:

private method1() {    
    String[] mystring = new String[] {"login" => "aaa", "pass" => "bbb"};
}

但这给了我一个错误。我想让这个工作,因为我有一个错误列表声明,最好识别:

throw new MyException(myerrors['failed_login_error']);

比一个:

throw new MyException(myerrors[116]);

我知道我可以做一个新课程,然后抛出一个对象:

throw new MyException(ERROR_CONSTANTS.FAILED_LOGIN_ERROR);

但我更喜欢第一个(与我在 Php 中使用的相同)。

那么,有什么想法吗?

4

4 回答 4

14

在 Java 中,您可能想要使用Map 接口,例如HashMap

虽然,我会说使用Enum实际上是您在第二个(错误列表)示例中应该做的事情。当您使用 Java 时,忘掉 PHP。在这种情况下,枚举要好得多,因为您需要一个定义明确的键列表。

于 2009-12-15T18:08:07.990 回答
6

对于这种特殊情况,您确实应该使用Properties(或者更好的是ResourceBundle来抽象属性文件)。

这里有一个使用教程

这是一种更好的方法,因为您可以国际化 (I18N) 消息(如果需要),并且您可以在文本文件中而不是在代码中指定它们(消息在文本中比在代码中好得多,因此您可以更新它们而无需重建)。

于 2009-12-15T18:21:29.943 回答
4

您不想使用 aHashMapPropertiesobject 来存储广泛命名的参数。您真的想考虑面向对象并使用类来封装帐户的数据并表达对象在现实世界中真正代表的内容:

String username = "aaa";
String password = "bbb";
Account acc = new Account(username,password);
if (!tryLogin(acc)) {
 throw new LoginFailedException(account);
}

这样,捕获到的客户端LoginFailedException可以利用这些信息并使用具有良好名称的静态类型方法来检索用户名,例如,通过调用loginFailedException.getUsername().

于 2009-12-15T18:27:16.580 回答
4

您可以使用双括号模式:

Map<String, String> map = new HashMap<String, String>() {{
    put( "login", "aaa" );
    put( "pass", "bbb" );
}};

...和你的另一个例子:

throw new MyException( myErrors.get( "failed_login_error" ) );
于 2009-12-15T18:10:08.717 回答