我遇到過幾次被稱爲助手對象的問題......任何人都可以詳細說明那些助手對象是什麼,爲什麼我們需要它們?java中的輔助對象是什麼?
回答
某些操作,這些操作是共同的幾個類可以被移動到輔助類,然後將其經由對象組合物中使用:
public class OrderService {
private PriceHelper priceHelper = new PriceHelper();
public double calculateOrderPrice(order) {
double price = 0;
for (Item item : order.getItems()) {
double += priceHelper.calculatePrice(item.getProduct());
}
}
}
public class ProductService {
private PriceHelper priceHelper = new PriceHelper();
public double getProductPrice(Product product) {
return priceHelper.calculatePrice(product);
}
}
使用輔助類可以以多種方式來完成:
- 直接實例化它們(如上述)通過依賴注入
- 通過使他們的方法
static
和訪問噸以靜態方式下襬,如IOUtils.closeQuietly(inputStream)
關閉InputStream
,但沒有拋出異常。 - 至少我的習慣是在命名類,只有靜態方法,而不是依賴
XUtils
,並classees這反過來又依賴/需要通過一個DI容器管理XHelper
(上面的例子只是一個樣本 - 它不應該在域驅動設計方面進行討論)
這些是「坐在一邊」的代碼主體,併爲對象做一些工作。他們「幫助」對象來完成它的工作。
作爲一個例子,很多人都有一個更接近輔助對象。這將採用各種可關閉的對象,例如java.sql.Statement,java.sql.Connection等,並將關閉對象,並忽略任何可能出現的錯誤。這往往是因爲如果你關閉一個對象時出現錯誤,無論如何你沒有辦法做到這一點,所以人們會忽略它。
不是有這個樣板:
try {
connection.close();
} catch (SQLException e) {
// just ignore… what can you do when you can't close the connection?
log.warn("couldn't close connection", e);
}
分散各地的代碼庫,他們只需撥打:
Closer.close(connection);
代替。例如,看看番石榴closeQuietly。
嗯,至少你應該記錄異常,所以當你的連接池溢出或你的數據庫監聽器不給你新的連接,你會知道是什麼導致它。 – 2013-11-14 16:12:16
'幫助'方法通常是一種方法,使更容易,無論它是什麼。有時候,他們已經習慣了讓事情變得更可讀/可清楚地組織(有些人可能會爭辯說這一點,但它最終很主觀的):
public void doStuff() {
wakeUp();
drinkCoffee();
drive();
work();
goHome();
}
在哪裏,自己的每一個「輔助方法,」是相當複雜的...概念變得非常清晰和簡單。
輔助方法的另一個非常好的用法是提供跨許多不同類的通用功能。最好的例子是Math
類,它包含了大量的靜態幫助方法,可以幫助您計算諸如數字的日誌,數字的指數等。
您在哪裏畫線什麼是輔助方法,什麼是常規方法是非常主觀的,但這是它的要點。其他答案也很不錯。
在我看來,Helper類與在C++類中聲明的正常函數類似。例如,如果您需要多個類的全局常量,則可以定義一個包含最終靜態const變量的輔助類。
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Helpers {
public static String getDate() {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
return dateFormat.format(new Date());
}
public static boolean isTimeABeforeTimeB(String timeA, String timeB) {
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm aa");
Date dA = dateFormat.parse(timeA);
Date dB = dateFormat.parse(timeB);
if (dA.getTime() < dB.getTime()) {
return true;
} else {
return false;
}
} catch (Exception e) {
//
}
return false;
}
public static String getDateAndTimeInput(String prompt) {
Scanner input = new Scanner(System.in);
String ans;
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm aa");
dateFormat.setLenient(false);
boolean dateValid;
do {
System.out.print(prompt);
ans = input.nextLine();
ans = ans.trim();
dateValid = true;
try {
Date d = dateFormat.parse(ans);
} catch (Exception e) {
dateValid = false;
}
} while (!dateValid);
return ans;
}
public static String getStringInput(String prompt) {
Scanner input = new Scanner(System.in);
String ans;
do {
System.out.print(prompt);
ans = input.nextLine();
ans = ans.trim();
} while (ans.length() == 0);
return ans;
}
public static double getDoubleInput(String prompt) {
Scanner input = new Scanner(System.in);
double ans = 0;
boolean inputValid;
do {
System.out.print(prompt);
String s = input.nextLine();
//Convert string input to integer
try {
ans = Double.parseDouble(s);
inputValid = true;
} catch (Exception e) {
inputValid = false;
}
} while (!inputValid);
return ans;
}
public static int getIntegerInput(String prompt) {
Scanner input = new Scanner(System.in);
int ans = 0;
boolean inputValid;
do {
System.out.print(prompt);
String s = input.nextLine();
// Convert string input to integer
try {
ans = Integer.parseInt(s);
inputValid = true;
} catch (Exception e) {
inputValid = false;
}
} while (!inputValid);
return ans;
}
public static int getIntegerInput(String prompt, int lowerBound, int upperBound) {
Scanner input = new Scanner(System.in);
int ans = 0;
boolean inputValid;
do {
System.out.print(prompt);
String s = input.nextLine();
// Convert string input to integer
try {
ans = Integer.parseInt(s);
if (ans >= lowerBound && ans <= upperBound) {
inputValid = true;
} else {
inputValid = false;
}
} catch (Exception e) {
inputValid = false;
}
} while (!inputValid);
return ans;
}
}
這是一個助手類的例子。它包含了哪些方法是項目中其他類的常用方法。
例如,如果有人想從類中輸入整數,則必須輸入以下內容:String num = Helpers.getIntegerInput(「input your number」);
提示符是顯示給用戶的輸出。其他例子輸入一個字符串,雙精度,日期和時間等
- 1. 什麼是輔助功能菜單?
- 2. 什麼是java中的標準對象?
- 3. java中的對象圖是什麼?
- 4. 鎖定指定對象和鎖定輔助對象有什麼區別?
- 5. 輔助對焦
- 6. 在rails的輔助模塊中使用attr_reader是什麼意思?
- 7. CSS編碼在輔助功能中的作用是什麼?
- 8. 在河內的算法中,什麼是輔助?
- 9. 什麼是java中的對象,它有什麼作用
- 10. 什麼是java中的助記符?
- 11. 把手傳遞對象爲輔助
- 12. WorkFront/AtTask API查詢輔助對象
- 13. 有條件保存輔助表對象
- 14. 是否定義允許的對象之外的輔助功能?
- 15. 什麼是django.utils.functional .__ proxy__對象,它有什麼幫助?
- 16. 輔助依賴風格的目的是什麼?
- 17. 爲什麼foldr使用輔助函數?
- 18. SUPL MS輔助 - 發送什麼測量
- 19. VB.NET - 爲什麼輔助表單關閉?
- 20. 在R中用2D時間序列對象存儲輔助數據的最佳方法是什麼?
- 21. 檢索輔助監視器DPI的正確方法是什麼?
- 22. 什麼是傳遞給D3DCompile2的「輔助數據」?
- 23. HTML - 什麼是最重要的輔助功能?
- 24. 輔助函數的命名約定是什麼?
- 25. 什麼是對象SqlConnection.BeginTransaction對
- 26. 對象的ArrayList幫助java
- 27. Java對象實例 - 什麼不對的:
- 28. 什麼是MVC3 HTML輔助方法,這種數據類型?
- 29. 有沒有人知道視覺輔助是什麼?
- 30. 這是什麼意思輔助功能狀態已更改:開?
所以意思是與實用工具類同義嗎?我經常使用「'blahUtil.java'」,但不斷看到類名爲''blahHelper.java'「 – wired00 2012-06-05 05:50:16
的類關閉,但不完全。至少在我的慣例中,實用程序類是沒有任何依賴關係的靜態方法,而幫助程序具有依賴關係,因此具有非靜態方法。 – Bozho 2012-06-05 08:01:38
對,我得到你,我想這只是歸結爲開發人員保持一種標準的做事方式,但我明白你的意思。關於Util是靜態的,歡呼聲 – wired00 2012-06-05 08:29:32