小编Big*_*d_E的帖子

您应该在生产代码中使用 assert 语句断言 not null 吗?

我看过这个问题,但还有几个关于assert关键字用法的问题。我正在与其他一些编码人员讨论如何使用assert. 对于此用例,有一种方法可以在满足某些先决条件时返回 null。我编写的代码调用该方法,然后断言它不返回 null,并继续使用返回的对象。

例子:

class CustomObject {
    private Object object;

    @Nullable
    public Object getObject() {
        return (object == null) ? generateObject() : object;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在想象我像这样使用它:

public void useObject(CustomObject customObject) {
    object = customObject.getObject();
    assert object != null;
    // Do stuff using object, which would throw a NPE if object is null.
}
Run Code Online (Sandbox Code Playgroud)

有人告诉我应该删除assert,它们应该用于生产代码,只能用于测试。真的吗?

java assert nullable

33
推荐指数
4
解决办法
7330
查看次数

字节从文件中读取错误?

因此,我试图将3个long存储到一个文件中,但是它将存储大量数据,因此我将其转换为字节数组并保存。我目前的保存方法:

try (FileOutputStream output = new FileOutputStream(path, true)) {
                    //Put the data into my format
                    byte[] data = new byte[24];
                    main.getLogger().log(Level.INFO, "Saving most sig bits");
                    System.arraycopy(ByteUtils.longToBytes(uuid.getMostSignificantBits()), 0, data, 0, 8);
                    System.arraycopy(ByteUtils.longToBytes(uuid.getLeastSignificantBits()), 0, data, 8, 8);
                    System.arraycopy(ByteUtils.longToBytes(player.getTokens()), 0, data, 16, 8);
                    //Write data in the format
                    output.write(data);
                }
Run Code Online (Sandbox Code Playgroud)

longToBytes方法:

private static ByteBuffer buffer = ByteBuffer.allocate(8);

public static byte[] longToBytes(long x) {
    System.out.println(x);
    buffer.putLong(0, x);
    return buffer.array();
}
Run Code Online (Sandbox Code Playgroud)

字节数组已保存到文件,但第一个字节被截断。longToByes中的print语句将打印8次三遍。

原始多头是:

-9089798603852198353,-5339652910133477779,5992

如果我打印字节数组,我得到:

-127,-38,-116,84,97,-116,78,47,-75,-27,-67,-8,11,-100,-2,109,0,0,0,0, 0、0、23、104(24个字节)

但是在文件中我看到:ÚŒTaŒN/ µå½ø(VT符号)–þm(nul)(nul)(nul)(nul)(nul)(nul)(etb)h,它是23个字节(第一个框未显示在记事本++)

但是如果我用

bytes = IOUtils.toByteArray(new FileReader(file));
Run Code Online (Sandbox Code Playgroud)

我懂了: …

java

5
推荐指数
1
解决办法
159
查看次数

String#replaceFirst 似乎随机不起作用

我有一个字符串,我尝试替换 %s 的第一次出现。

例如:

"$%s".replaceFirst("%s", "10");
Run Code Online (Sandbox Code Playgroud)

返回 10 美元,但

"&cYou do not have %s!".replaceFirst("%s", "$10");
Run Code Online (Sandbox Code Playgroud)

抛出 java.lang.IndexOutOfBoundsException: No group 1

我有打印语句,我知道 100% 是抛出错误的原因,这就是语句中的内容。

java regex

0
推荐指数
1
解决办法
56
查看次数

标签 统计

java ×3

assert ×1

nullable ×1

regex ×1