2015-03-02 118 views
2

我想创建一个接口,我的一些类将实现。虽然这对于一个T型正常工作:嵌套泛型类型接口

public interface AsyncResponse<T> { 
    void processFinish(T output); 
} 

这样使这项工作对泛型列表使用processFinish<String>

似乎没有。或者至少,我无法理解如何能够允许以下几种之一而不限于:

  1. LinkedHashSet输出。
  2. ArrayList输出。

我尝试以下,但没有奏效:

public interface AsyncGenericResponse<T<X>>{ 
    void processFinish(T<X> output); 
} 

public interface AsyncGenericResponse<LinkedHashSet<T>{ 
    void processFinish(LinkedHashSet<T> output); 
} 

无论是解决方案似乎工作。我该如何解决这个问题,甚至有可能?

回答

3

通用类型仅为T,该方法接受LinkedHashSet<T>,但在此类声明中没有“嵌套泛型”。

将下面的代码编译就好:

public interface AsyncGenericResponse<T>{ 
    void processFinish(LinkedHashSet<T> output); 
} 
+0

此外,可以考虑使用'集合'超类型,而不是一个特定的'Set'或'List'如果你只需要一个集合,但不要不想在参数级别指定确切的类型。 – Blacklight 2015-03-02 12:29:48

+0

@Matthijs但是在这种情况下,虽然它可以用于你的'List'类型,但它不再适用于类型,例如'String'? – Unheilig 2015-03-02 12:32:26

+0

但是在这种情况下没有选择使LinkedHashSet成为它使用变量的泛型类型?在我的界面中使用>? – Matthijs 2015-03-02 12:32:39