catch{throw..} 实现后缺少 return 语句

Missing return statement after catch{throw..} implementation

它说缺少 return 语句,即使它在 try 块中有 return。我不明白。 我正在尝试制作一个 android 应用程序,并使用 android keystore 存储该应用程序的登录凭据。 另外,如果有人能给我一个简单的 keystore 实现示例,那就太好了。我找到了 2 个示例,它们不是很容易理解(缺少代码)并且也很难根据我的情况实施。

private SecretKey createKey() {
    try {
        KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            keyGenerator.init(new KeyGenParameterSpec.Builder("Key", KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
                    .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
                    .setUserAuthenticationRequired(true)            //burayı kaldırırsan screen locka gerek kalmaz
                    .setUserAuthenticationValidityDurationSeconds(5)
                    .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
                    .build());
            return keyGenerator.generateKey();
        }
    } catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) {
        throw new RuntimeException("Failed to create a symmetric key", e);
    }

}

如果您的 Build.VERSION.SDK_INT >= Build.VERSION_CODES.M 条件不满足,问题是您没有 return。

private SecretKey createKey() {
    try {
        KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // ...
            return keyGenerator.generateKey();
        }
        // add a return here if we're not on >= Android M.
    } catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) {
        throw new RuntimeException("Failed to create a symmetric key", e);
    }
    // you could also have a return here.
}

如果您的 if 语句不符合要求,您需要有一个 return 语句,即 运行。现在,如果 SDK 大于 Build.VERSION_CODES.M,您只需要 return。

您可以在整个 try 和 catch 之后放置一个 return 语句,因为如果您在 try 中 return 它将离开该方法。这意味着如果构建SDK不符合要求,其他return只是运行。

private SecretKey createKey() {
try {
    KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        keyGenerator.init(new KeyGenParameterSpec.Builder("Key", KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
                .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
                .setUserAuthenticationRequired(true)            //burayı kaldırırsan screen locka gerek kalmaz
                .setUserAuthenticationValidityDurationSeconds(5)
                .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
                .build());
        return keyGenerator.generateKey();
    }
} catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) {
    throw new RuntimeException("Failed to create a symmetric key", e);
}

// Return here...

}

在最后一个大括号前添加return语句