Java泛型方法,如何使两个参数具有相同的类型?

Java泛型方法,如何使两个参数具有相同的类型?,java,Java,我有以下接口和类: public interface SomeInterface { ... } public class TypeA implements SomeInterface { ... } public class TypeB implements SomeInterface { ... } 在另一个类中,我有以下方法: public static <T extends SomeInterface> void foo(T a, T b) {

我有以下接口和类:

public interface SomeInterface {
    ...
}

public class TypeA implements SomeInterface {
    ...
}

public class TypeB implements SomeInterface {
    ...
}
在另一个类中,我有以下方法:

public static <T extends SomeInterface> void foo(T a, T b) {
    ...
}
并对方法进行如下修改:

public interface SomeInterface<T> {
    ...
}

public class TypeA implements SomeInterface<TypeA> {
    ...
}

public class TypeB implements SomeInterface<TypeB> {
    ...
}
public static <T> void foo(SomeInterface<T> a, SomeInterface<T> b) {
    ...
}
publicstaticvoidfoo(SomeInterface a,SomeInterface b){
...
}

这个解决方案有效,但对我来说似乎有点奇怪,因为我必须写两次类名:
类a实现了SomeInterface
。我想知道是否有比上述更好的解决方案。谢谢。

在这种情况下,如果只有这两个接口,我会使用:

public static <T extends SomeInterface> void foo(TypeA a, TypeA b) {
public static <T extends SomeInterface> void foo(TypeB a, TypeB b) {
publicstaticvoidfoo(typeaA,typeaB){
公共静态无效foo(类型b a、类型b){

但是,当存在未知数量的接口时,您的解决方案也会起作用。

您的第一个解决方案有什么问题?您能否提供一些关于接口和方法的详细信息?如果该方法将
TypeA
的两个不同子类的实例作为参数接收,会发生什么情况?@JBNizet编译器将向上转换
b
直到有一个合适的超类,这两个超类都有共同点-例如
接口
。不能保证
a
b
是同一类型的,只是它们都可以分配给一个。你能避免每次调用
接口
吗,即使在ex示例-这是非常糟糕的做法,因为它非常混乱。我发现这种情况与标准库
Compariable
接口非常相似,它需要在
Comparieto
方法中确保
和参数不只是
Compariable
,而是彼此可比。它几乎使用sam你想出的解决方案。