在Generic类中使用interface作为Bounding Type

时间:2018-02-16 18:37:08

标签: java

public class CollectionsOutput {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here



        //A.display(2,3);



    }

}
interface B
{

}
class A implements B
{

}
class C <T & B>
{

}

在上面的Java程序中,我在C类声明中遇到编译错误。 (作为'&gt;'预期)。但我认为我们也可以在Generics中将接口指定为绑定类型,但它不起作用。请帮助我。

3 个答案:

答案 0 :(得分:3)

对于泛型和边界,Workspace.Merge(sourcePathSpec, targetPath, versionFrom, versionTo, lockLevel,MergeOptionsEx.Baseless); 仅用于泛型类型参数声明的多个边界之间。

如果您的意思是&必须是T的子类型,请使用B

extends

您可能会期望它是这样的:

class C<T extends B> {}

因为这就是你通常有一个类实现接口的方式。

class C<T implements B> {}  // INCORRECT

但是,在为泛型类型参数指定边界时,必须使用class Concrete implements AnInterface {} ,而不是extends

使用implements适用于多个边界,例如:

&

请注意,使用多个边界时,除第一个边界之外的任何额外边界必须是接口类型,而不是类或其他类型变量。

答案 1 :(得分:1)

您可能认为<T extends B>可以确保您作为通用传递的任何类型仍然附加到您的标记界面。

答案 2 :(得分:0)

交叉点类型fn仅允许在method等结构中指定多个绑定。

例如:

var length = 10;

function f() {
    console.log(this.toString());
    console.log(this.length);
}

var obj = {
  length: 5,
  fn: f,
  method: function(fn) {
    fn();
    arguments[0]();
  }
};

f()
f(1);
obj.fn();
obj.fn(1);
obj.method(f, 1);
obj.method(f, 1, 2);

这意味着hive -hiveconf prvDate=$prvDate -S -e "select max(ID) from Employee where unix_timestamp(date,'dd-MM-yyyy') > unix_timestamp('${hiveconf:prvDate}','dd-MM-yyyy')" 通过扩展A & I & ...并同时实现C extends A & I & ...的某种类型进行参数化。

另一个例子:

public class C<T extends Number & Serializable> {

}

此处对参数类型应用双重限制。

您的案例不使用类型绑定,因此不能使用交集类型。