Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以用JAVA编写一个带有通用对象参数的方法吗_Java - Fatal编程技术网

我可以用JAVA编写一个带有通用对象参数的方法吗

我可以用JAVA编写一个带有通用对象参数的方法吗,java,Java,我有办法 public int addTransaction(Transactions tr){ //etc... } 现在我想创建一个新的方法,它将完全像addTransaction一样,但是它将采用不同类型的对象Order 我意识到我可以创造出这样的东西: public int addTransaction(Order tr){ //etc... } 然而,我想知道是否可以在括号内有一个泛型类型的方法,以便传递我想要的任何对象。这可以做到吗?除非订单和交易之间存在超类/子类关

我有办法

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

}
现在我想创建一个新的方法,它将完全像
addTransaction
一样,但是它将采用不同类型的对象
Order

我意识到我可以创造出这样的东西:

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

}

然而,我想知道是否可以在括号内有一个泛型类型的方法,以便传递我想要的任何对象。这可以做到吗?

除非
订单
交易
之间存在超类/子类关系,否则不行。如果存在这种关系,您只需要获取超类的重载。

除非
订单
交易
之间存在超类/子类关系,不需要。如果存在这样的关系,您只需要接受超类的重载。

泛型方法创建如下

public <T> int addTransaction(T tr){
    //TODO:
    return 0;
}
public int addTransaction(T tr){
//待办事项:
返回0;
}

通用方法创建如下

public <T> int addTransaction(T tr){
    //TODO:
    return 0;
}
public int addTransaction(T tr){
//待办事项:
返回0;
}

事务
Order
需要从相同的
类进行扩展,或实现相同的
Interface
,或者需要扩展另一个才能使其工作

以下是几个例子:

一个
扩展另一个:

public class Test {

    public int addTransaction (final Transaction tr) {

    }
}

class Transaction {

}

class Order extends Transaction {

}
两者共享一个共同的
界面:

public class Test {

    public int addTransaction (final Process tr) {

    }
}

interface Process {

}

class Transaction implements Process {

}

class Order implements Process {

}

交易
订单
都需要从相同的
类扩展或实现相同的
接口
,或者一个需要扩展另一个才能工作

以下是几个例子:

一个
扩展另一个:

public class Test {

    public int addTransaction (final Transaction tr) {

    }
}

class Transaction {

}

class Order extends Transaction {

}
两者共享一个共同的
界面:

public class Test {

    public int addTransaction (final Process tr) {

    }
}

interface Process {

}

class Transaction implements Process {

}

class Order implements Process {

}

您可以使用泛型传递任何对象吗?对你是这样做的:

public <T> int addTransaction(T tr) {
    // ...
}
因为
T
是无约束的。不管是哪种方式,使用
tr
所能做的就是调用在
对象上声明/定义的方法

现在,如果有一些共同的父类型
Transaction
Order
(以及其他任何人)共享,那么事情开始变得更有意义了。如果公共父类型是
parent
,则可以编写如下内容

public <T extends Parent> int addTransaction(T tr) {
    // ...
}
我什么也看不见


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

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

public <T> int addTransaction(T tr) {
    // ...
}
因为
T
是无约束的。不管是哪种方式,使用
tr
所能做的就是调用在
对象上声明/定义的方法

现在,如果有一些共同的父类型
Transaction
Order
(以及其他任何人)共享,那么事情开始变得更有意义了。如果公共父类型是
parent
,则可以编写如下内容

public <T extends Parent> int addTransaction(T tr) {
    // ...
}
我什么也看不见


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

我们可以做:
公共类SOTest{public int addTransaction(T tr){}
我们可以做:
公共类SOTest{public int addTransaction(T tr){}
此处不需要使用泛型:您可以简单地使用
对象
。这也可以使用!这里不需要使用泛型:您也可以简单地使用
Object
。这也可以使用!