我有类 Employee
和 3 个扩展 Employee
类的类。
我还有 EmployeeService 接口(interface),我希望只有一个 save 方法来处理保存每种类型的 Employee。所以我认为可以使用泛型来解决它。
这是我在 EmployeeService 接口(interface)中尝试的:
public interface EmployeeService {
<SubRequestT extends Employee>EmployeeResponse save(SubRequestT requestT);
}
以及提供实现的类:
@Service
public class EmployeeServiceImpl implements EmployeeService {
// So here in argument i want to have to put any kind of Employee, for example:
@Override
public EmployeeResponse save(OfficeEmployee requestT) {
// Logic for saving employee
return null;
}
}
但是当我从 Employee
类型更改为任何其他类型时,例如从 Employee 扩展的 OfficeEmployee
,编译器给了我一个错误。解决这个问题的最佳方法是什么?
最佳答案
对于“方法泛型”,我(我和编译器)也很挣扎,但是通过“类型泛型”,我们可以做到这一点!
假设:
class Foo {/*...*/}
class Bar extends Foo {}
class Baz extends Foo {}
// extending your question to two generic parameters:
class FooResult {}
class BarResult extends FooResult {}
class BazResult extends FooResult {}
当我们定义接口(interface)时:
interface FooI<I extends Foo, R extends FooResult> { //or with even more (fixed size) "generic parameters"
R save(I request);
}
我们可以像这样覆盖它:
class BarImpl implements FooI<Bar, BarResult> {
@Override
public BarResult save(Bar bar) {
// ...
return ...;
}
}
class BazImpl implements FooI<Baz, BazResult> {
@Override
public BazResult save(Baz baz) {
// ...
return ...;
}
}
关于java - 在Java中使用继承时如何使方法通用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70404813/