2016-07-01 59 views
0

我有一個方法方法與一般的對象參數

public int addTransaction(Transactions tr){ 
    //etc... 

} 

,現在我想創建一個新的方法,這將做的一樣addTransaction但它會採取不同類型的對象Order order

我意識到,我可以創造這樣的:

public int addTransaction(Order tr){ 
    //etc... 

} 

但是我在想,如果我能有一個方法用括號內泛型類型所以要通過我想要的任何對象。這可以做到嗎?

+0

我們可以這樣做嗎?'public class SOTest {public int addTransaction(T tr){}}' – Kartic

回答

0

你可以傳遞任何對象?是。你這樣做:

public <T> int addTransaction(T tr) { 
    // ... 
} 

問題是,但是,這對你有什麼作用?該咒語相當於

public int addTransaction(Object tr) { 
    // ... 
} 

因爲T是不受約束的。無論哪種方式,你所能做的就是tr就是在Object上聲明/定義的方法。

現在,如果有一些共同的父類型TransactionOrder(和任何其他人)共享,那麼情況開始變得更有意義。如果公共父類型爲Parent,那麼你可以寫類似

public <T extends Parent> int addTransaction(T tr) { 
    // ... 
} 

,你現在可以把tr如在Parent實例。但是,這是什麼給你以下?

public int addTransaction(Parent tr) { 
    // ... 
} 

沒什麼我能看到的。

所以,底線,是的,你可以做這樣的事情,但做它的價值是可疑的。

1

除非OrderTransactions之間存在超類/子類關係,如果存在這樣的關係,你只需要接受超類的重載。創建

0

泛型方法如下

public <T> int addTransaction(T tr){ 
    //TODO: 
    return 0; 
} 
+0

這裏使用泛型是不必要的:您可能只需使用Object。 –

+0

這也可以使用! –

0

TransactionOrder將需要兩個來自同一Class擴展或實現相同Interface,還是一個需要爲了延長等這個工作。

這裏有幾個例子:延伸至另一

一個Class

public class Test { 

    public int addTransaction (final Transaction tr) { 

    } 
} 

class Transaction { 

} 

class Order extends Transaction { 

} 

兩個共享使用泛型共同Interface:

public class Test { 

    public int addTransaction (final Process tr) { 

    } 
} 

interface Process { 

} 

class Transaction implements Process { 

} 

class Order implements Process { 

}