java编码标准
我发现一个代码如下所示java编码标准,java,Java,我发现一个代码如下所示 public static final Object[][] TABLE_COLUMNS = { { "HistoryDate", new Integer(Types.TIMESTAMP) }, //java.sql.Type { "id", new Integer(Types.VARCHAR) }, { "SessionId", new Integer(Typ
public static final Object[][] TABLE_COLUMNS = {
{ "HistoryDate", new Integer(Types.TIMESTAMP) }, //java.sql.Type
{ "id", new Integer(Types.VARCHAR) },
{ "SessionId", new Integer(Types.VARCHAR) }};
上述代码有效吗?如何有效?可能是我误解了上述代码Type.VARCHAR=12
。我们不能写Integer.valueOf(12)代码> 可以,但这就是常数的用途,对吗?如果有人决定将VARCHAR
的值更改为1337
,您不必更改代码…是的,您可以使用12的值,但这是一个神奇的数字,通常被认为是不好的做法
当然,您可以编写新的整数(12),但这会大大降低可读性。如果其他人手里拿着这个代码,他根本不知道这意味着什么。在这种情况下,他和您知道它引用了MySQL类型中VARCHAR类型的常量。此数组似乎存储列名及其数据类型(Object[][]的使用值得怀疑,但有效):
您可以编写Integer.valueOf(12),但可读性将完全丧失。)严格地说,你可以写作
{ "HistoryDate", Types.TIMESTAMP }
让自动装箱完成剩下的工作。)为什么您的建议会有所改进?我认为使用这些类型是更好的文档。它以“12”永远不可能的方式清楚地说明了发生了什么。Type.VARCHAR在java.sql.Type类中定义为常量。所以没人能改变它。你认为代码是自己写的吗?我不明白。你的意思是说,在我的OP中,你可以更改类型的值。VARCHAR=1337
?但是你仍然需要重新编译。可读性是主要原因。@AmitG我猜“某人”的意思是,首先定义Types.VARCHAR的语言创建者可能有一天会选择随意重新排列数字。这里不建议使用自动装箱,因为0和128之间的值有一个内部整数缓存,所以它应该是同一个对象(此处为12)如果你想把它转换成一张地图,@Chasmo,既然我们谈论的是一组固定的元素,那怎么会是一件坏事呢?我们希望他们是一样的,对吗?无论如何,我建议用一张地图或至少一个物体来保存这两个值。@Chasmo你想说的不是很清楚。。。是的,所有的12
都将是相同的Integer
实例,但这是一个什么问题呢?我认为这没有问题。我更仓促地想到了集合的一般定义,其中不允许重复值,尽管java集合和映射中允许通过不同的键重复值。因此,请随意选择您喜欢的autobox;-)@Chasmo让我们希望没有人断章取义地说出你的最后一句话:-Dso那么我们可以像Types.VARCHAR
那样编写,而不是newinteger(Types.VARCHAR)
你应该始终使用定义的常量,但是你可以通过使用Integer.valueOf(Types.VARCHAR)