Java Generics - 编译类型和实现对象的时间验证

时间:2016-07-10 05:11:24

标签: java generics

我有一个方法来为接口类添加实现类'对象,我想把它作为通用类。 实现类还扩展了类X

public abstract class X<T>{...}

public interface InterfaceA{...}

public class A extends X implements InterfaceA{...}

现在,我的方法是:

public <S, <T extends X<S>> void add(Class<S> clazz, T object){...}

但是我没有在X上使用类型参数,它仅适用于上述方法。有没有一种方法可以让X没有类型参数,并且在方法'add'中仍然有编译时验证吗?

由于

修改

我认为我的问题不明确。请查看以下示例代码:

public interface I {}

public abstract class X {}

public class A extends X implements I {}

public class B implements I {}

public class C extends X {}

public class Main {
    public static void main(String[] args) {
        add(I.class, new A());  // uses first method
        add(I.class, new B());  // uses second method
        add(I.class, new C());  // uses first method
    }

    public static <P, T extends P> void add(Class<P> c, T object) {}  //No

    public static <P, T extends X> void add(Class<P> c, T object) {}  //No

}

我需要一个'add'方法,只接受A的实例,而不是B不是C的。 上述方法签名都不符合我的要求

2 个答案:

答案 0 :(得分:1)

如果您不关心X的类型参数,只需将其设为Object

public class A extends X<Object> implements InterfaceA{...}

因此该方法适用于任何事情。

答案 1 :(得分:0)

我相信您可以删除X上的类型,但仍然会以下列方式获取编译时错误。当然,如果这不符合您的要求,那么更多的背景会更有帮助。

{{1}}