我問這個問題上Code Review,但有人把它擱置說,這是比較合適的在這裏提出它,所以現在的問題是構建的類和方法的Java
假設我有一個應用程序並且該應用程序有一個類爲我從一個方法生成一個隨機字符串,然後我從該字符串創建一個祕密。
的代碼是類似於以下,
public class MyRandomStringGeneratorClass
{
private String generatedRandomString;
public String generateRandomString()
{
//some logic
this.generatedRandomString = someRandomStringGenerator();
}
public String generateSecretFromGeneratedRandomString()
{
//some encryption of the String 'generatedRandomString'
}
}
public class MainClass
{
public static void main(String args[])
{
MyRandomStringGeneratorClass obj = new MyRandomStringGeneratorClass();
String randomString = obj.generateRandomString();
String secretFromRandomString = obj.generateSecretFromGeneratedRandomString();
}
}
與上面的代碼的問題是,如果API的用戶並沒有產生什麼隨機字符串,並呼籲該保密信息生成方法的前期。這將會給他/她一個空指針錯誤,即
public class MainClass
{
public static void main(String args[])
{
MyRandomStringGeneratorClass obj = new MyRandomStringGeneratorClass();
// String randomString = obj.generateRandomString();
String secretFromRandomString = obj.generateSecretFromGeneratedRandomString();
}
}
我想在這種情況下,我能做到的最好的事情是把在祕密生成方法的空檢查該字段,如果它爲空,登錄一個消息在控制檯給用戶,你必須首先生成一個字符串來獲取該字符串的祕密,但它似乎有點老生常談。
即
public class MyRandomStringGeneratorClass
{
private String generatedRandomString;
public String generateRandomString()
{
//some logic
this.generatedRandomString = someRandomStringGenerator();
}
public String generateSecretFromGeneratedRandomString()
{
if(generatedRandomString==null)logSomeErrorAndReturn();
//some encryption of the String 'generatedRandomString'
}
}
我能想到的另一件事是從方法generateSecretFromGeneratedRandomString()
內調用方法generateRandomString()
。這將確保String確實生成並且ecryption也在相同的位置執行。
public class MyRandomStringGeneratorClass
{
private String generatedRandomString;
private String generateRandomString()
{
//some logic
this.generatedRandomString = someRandomStringGenerator();
}
public String generateSecretFromGeneratedRandomString()
{
generatedRandomString=generateRandomString();
// encrypt the String now
}
}
但是我可能無法返回純生成的隨機字符串(不聲明字段作爲公共或除非我提供相同的吸氣劑的方法)。 請建議適當的方法。詢問是否需要進一步澄清。
您已經知道如何檢測情況。當你找到它時,你該怎麼做。拋出異常? – John3136