具有通用对象参数的方法

时间:2016-07-01 12:38:32

标签: java

我有一个方法

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

}

现在我想创建一个新方法,它与addTransaction完全相同,但它会采用不同的类型对象Order order

我意识到我可以创造这个:

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

}

但是我想知道我是否可以在括号内使用泛型类型的方法,以便传递我想要的任何对象。可以这样做吗?

4 个答案:

答案 0 :(得分:1)

除非OrderTransactions之间存在超类/子类关系,否则不会。如果存在这样的关系,你只需要超载来获取超类。

答案 1 :(得分:1)

你能使用泛型传递任何对象吗?是。你这样做:

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) {
    // ...
}

我什么都看不到。

所以,底线,是的,你可以做这样的事情,但这样做的价值是可疑的。

答案 2 :(得分:0)

通用方法创建如下

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

答案 3 :(得分: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 {

}