我與接受一個類類型作爲參數的函數工作:傳遞對象子類型
我試圖通過getSpans()對象的具體子類「的類型。」
Spannable ss;
Object type;
int start;
int end;
//Assume above variables properly initialized.
....
//getSpans(int start, int end, Class<T> type)
ss.getSpans(start, end, ???);
我與接受一個類類型作爲參數的函數工作:傳遞對象子類型
我試圖通過getSpans()對象的具體子類「的類型。」
Spannable ss;
Object type;
int start;
int end;
//Assume above variables properly initialized.
....
//getSpans(int start, int end, Class<T> type)
ss.getSpans(start, end, ???);
是的,只需使用type.class
。它將返回類型變量的Class對象。另請嘗試type.getClass().class
。
http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html
更好地利用第二個例子。
您可以通過使用策略模式而無需藉助一系列instanceof來實現此功能。這裏是一個示例實現,它使用不同的提供者計算運輸成本,而不必知道使用哪種提供者類型。在Strategy Pattern和full example
public enum ShippingMethod {
FIRST_CLASS {
public double getShippingCost(double weightInPounds, double distanceInMiles) {
// Calculate the shipping cost based on USPS First class mail table
}
},
FED_EX {
public double getShippingCost(double weightInPounds, double distanceInMiles) {
// Calculate the shipping cost based on FedEx shipping
}
},
UPS {
public double getShippingCost(double weightInPounds, double distanceInMiles) {
// Calculate the shipping cost based on UPS table
}
};
public abstract double getShippingCost(double weightInPounds, double distanceInMiles);
};
public class ShippingInfo {
private Address address;
private ShippingMethod shippingMethod = ShippingMethod.FIRST_CLASS;
public Address getAddress() {
return this.address;
}
public double getShippingCost(double weightInPounds, double distanceInMiles) {
return shippingMethod.getShippingCost(weightInPounds, distanceInMiles);
}
}
更多信息。
'type'是一個實例,所以'type.class'無效。另外,'type.getClass()'返回一個'Class'對象。 'Class'類型沒有一個名爲'class'的公共成員,所以'type.getClass()。class'也是無效的。 –
你是對的。我編輯了我的問題,這樣其他人就不會在我的困惑中一掃而空(因爲我在說getClass不起作用)。我試過getClass,並且由於編碼錯誤而沒有返回匹配。 btw..u不能得到一個實例的object.class,你只能選擇getClass()(我知道這是我認爲mike正在創造的點)。 – NameSpace