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语句
它说缺少 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语句