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你想出的解决方案。