2015-01-15 33 views
1

假設我有一個項目有許多不同類型的對象,但他們都有一個實例變量X,我如何使一個方法接受任何類型的對象,並返回X?如何讓接受任何對象作爲參數的JAVA方法?

虛擬代碼示例:

class Car{ 
int X =19; 
} 
class Apple{ 
int X =21; 
} 
class Bee{ 
int X =32; 
} 
public int GetX(Object ANY_OBJECT_HERE){ 
return ANY_OBJECT_HERE.X; 
} 
+1

使用'getX'方法定義接口。讓所有類實現該接口(可能通過返回其字段的值)。讓你的'GetX'方法接受一個接口類型的參數並調用它的'getX'方法。 – 2015-01-15 17:51:29

+1

就像編碼標準一樣,您不應該是方法名稱的大寫字母G.它應該是'getX' – Ascalonian 2015-01-15 17:52:49

回答

0

讓所有的類都來自(其中包含X說myObject的)一個抽象基類繼承,使信息getX參數類型是爲MyObject。

2

兩種方式把我的頭頂部:

  • 使用常用的接口定義的getX()方法
  • 使用反射所有對象

也有人說,你的方法接口是不正確的:你不期望任何對象,但只有那些有X屬性的人。這意味着從設計的角度來看,第一個解決方案是最正確的。

3

您有2個選項。

  1. 創建一個接口,比方說,Xholder,其中一個方法,getX()返回int。請Car,AppleBee執行Xholder返回X。然後,您目前的GetX方法是不必要的;現在稱爲GetX(yourObject)的任何東西現在都會調用yourObject.getX()

  2. 使用反射GetX。通過getClass()獲取對象的類並獲取類FieldgetField,傳遞變量名"X"。從那裏你可以得到價值。

第一個選項是最好的,因爲反射速度更慢,更容易出錯。

+0

是的,這就是我通常通過在每種類型的類中使用getter方法來做到這一點,但是我需要一個可以從任何對象返回字段的泛型方法。假設我有一個帶有許多gui對象的swing gui和一個名爲GetWidth(Object ANYOBJECT)的方法,我要麼必須在GetWidthOfButton(JButton按鈕)等中定義每種類型對象的一種方法......或者想出一些通用的方法適用於任何對象... – 2015-01-15 18:01:30

0

假設您知道可以通過使用多態概念與抽象類的接口或抽象方法來完成此操作;

您可以通過使用Java反射來解決此問題。你可以學習更多關於它here

0

爲什麼不只是使用java.lang.Object作爲參數?

+0

嘗試給出一個例子,當提出一個解決方案,使其更清晰。感謝您在堆棧溢出貢獻 – coder 2017-03-16 10:12:30

+1

這不是他已經在他的例子中做了什麼? – Ivar 2017-03-16 10:22:08

相關問題