Java 从一个没有混乱的接口实现通用方法?

Java 从一个没有混乱的接口实现通用方法?,java,generics,Java,Generics,在实现这样的接口时,有没有办法避免将所有类型添加到类定义中的混乱 MyInterface.java import java.util.List; abstract class BaseA {} abstract class BaseB {} abstract class BaseC {} interface MyInterface<T extends BaseA, U extends BaseB, V extends BaseC> { public void foo( Li

在实现这样的接口时,有没有办法避免将所有类型添加到类定义中的混乱

MyInterface.java

import java.util.List;
abstract class BaseA {}
abstract class BaseB {}
abstract class BaseC {}

interface MyInterface<T extends BaseA, U extends BaseB, V extends BaseC> {
    public void foo( List<? extends T> list );
    public void bar( List<? extends U> list );
    public void baz( List<? extends V> list );
} 
/* Some concrete implementations of the abstract classes used in the interface */
class A extends BaseA{}
class B extends BaseB{}
class C extends BaseC{}

class MyImplementation implements MyInterface<A,B,C> {
    public void foo( List<? extends A> list){}
    public void bar( List<? extends B> list){}
    public void baz( List<? extends C> list){}
}
import java.util.List;
抽象类BaseA{}
抽象类BaseB{}
抽象类BaseC{}
接口MyInterface{

public void foo(List泛型就是这样工作的,但是如果您发现自己添加到一个长类型列表中,您可能会重新考虑您的设计。在这种情况下(不知道代码的用途),我会进一步概括接口:

abstract class PlayBase {}
interface MyInterface<T extends PlayBase> {
    public void playWith(List<T> list);
}   
抽象类PlayBase{}
接口MyInterface{
公共无效playWith(列表);
}   
…以及一个示例实现:

class A extends PlayBase {}
class MyImplementationA implements MyInterface<A> {
    public void playWith(List<? extends A> list){}
}
A类扩展了PlayBase{}
类MyImplementationA实现MyInterface{
public void playWith(列表这个怎么样:

interface MyInterface {
    public <T extends BaseA> void playWithA( List<? extends T> list );
    public <U extends BaseB> void playWithB( List<? extends U> list );
    public <V extends BaseC> void playWithC( List<? extends V> list );
}   
接口MyInterface{

public void playWithA(ListUsing playWithA/B/C对于函数名来说是一个糟糕的选择。对此表示抱歉。它们实际上没有任何共同之处,只是一些随机的不同函数名。编辑了答案,以使用更常见的“随机”名称foo、bar、baz:)这是我一开始尝试实现它的方式,但该接口无法实现上述目标。(续)由于类型擦除,您无法将MyInterface实现为:类MyImpl{public void playWithA(列表)如果有人想知道这样的构造有什么用途,建议您在这里查看最后一个答案:上面的代码按预期工作,我只是想看看是否有其他方法可以在不使用所有额外语法的情况下实现这一点。