用泛型java实现接口

塔伦蒂诺

我正在编写一些Java代码,并且想在主类Array中编写方法。此类实现ImplementableClass。前者扩展了Iterable。Array类具有类型。

ImplementableClass.java:

public interface ImplementableClass<E> extends Iterable<E>{

    public void insertObject(E obj);

    public E removeObj(E obj);

}

Main.java:

public class Array<Integer> implements ImplementableClass<E>{
    public void insertObject(E obj){

    }

    public E removeLastObject(E obj){

    }

    //... main method and others below...
}

我对上面两个文件中的代码有一些疑问。

阅读Java文档时,Iterable的类型为E(通用值)。据我了解,接口只是“实现”它们的类中必须使用的方法的“蓝图”。从基本的角度来看,此处不应有任何变量。话虽如此,正如您可能会看到的,我的确也在Main的ImplementableClass中声明了这些方法。话虽如此,我有几个问题:

  1. 当在Array类中从ImplementableClass类声明我的方法时,这“覆盖”了我ImplementableClass类中的方法,对吗?

  2. 由于“ E obj”是这两个方法的参数,所以每当我在Array类中声明我的方法时,它们是否必须相同?我应该把什么传递给方法?“ E obj”是什么意思?

  3. 我想创建一个可以容纳E类型对象的数组。这意味着每当实例化一个新对象时,Array<Integer> theArray = new Array<Integer>我就可以在Array实例上调用我的Array类上的方法了吗?(即theArray.removeLastObject())我应该作为参数传递什么?

  4. 为什么Iterable<E>在这种情况下有用?

瑞安·J

当在Array类中从ImplementableClass类声明我的方法时,这“覆盖”了我ImplementableClass类中的方法,对吗?

是的(嗯,从技术上讲不是,因为接口中没有要覆盖的功能,但是您可以@Override用来表示您要覆盖它)

由于“ E obj”是这两个方法的参数,所以每当我在Array类中声明我的方法时,它们是否必须相同?我应该把什么传递给方法?“ E obj”是什么意思?

它们必须与实现接口时指定的通用类型相同。E obj意味着您已经声明了一个名为obj泛型类型的参数E这意味着您需要定义将特定类型用作参数的方法。

不过,在声明中定义接口的通用类型会更有意义,例如:

public class ArrayClass implements ImplementableClass<Integer>

因此您可以使用以下方法:

public void insertObject(Integer obj) {}

public Integer removeObj(Integer obj) {}

否则,您可以使Array类成为通用类,并将通用类型的规范留给调用方:

public class ArrayClass<E> implements ImplementableClass<E>

我想创建一个可以容纳类型E的对象的数组。这意味着每当实例化一个新对象-> Array theArray = new Array时,我都可以在TheArray实例上调用我在Array类上拥有的方法吗?(即theArray.removeLastObject())我应该作为参数传递什么?

为此,您需要使Array类通用,如上所示。您传入的参数将与创建数组时指定的类型相同(Integer在示例中)。

为什么在这种情况下使用Iterable?

Iterable很有用,因此您可以利用数组的迭代器功能以及增强的foreach语法(for (Object o : someObjectArray) {...}

另外,我建议不要命名您的Array类Array...也许要考虑利用现有的Iterable类来构造您正在做的事情,但这看起来像是一个学习练习,所以就去做吧。

高温超导

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从 Java 接口实现泛型方法

来自分类Dev

用Java继承泛型接口

来自分类Dev

实现接口的泛型列表

来自分类Dev

Java泛型,实现类型为Iterable <E>的接口

来自分类Dev

在Java中使用泛型和反射实现接口方法

来自分类Dev

Java泛型-使用实现接口的元素列表

来自分类Dev

为什么Java泛型无法实现接口?

来自分类Dev

如何确定Java泛型是否实现了特定的接口?

来自分类Dev

Java-泛型和通配符与接口与实现

来自分类Dev

Java泛型中的接口实现传播

来自分类Dev

用不同的泛型类型实现同一泛型Java接口的多个实例?

来自分类Dev

为什么在Java中可以将接口的泛型方法实现为非泛型?

来自分类Dev

T是类实现接口的泛型

来自分类Dev

检查泛型T是否实现接口

来自分类Dev

如何实现接口泛型方法

来自分类Dev

如何实现接口泛型方法

来自分类Dev

Java泛型接口转换

来自分类Dev

用不同的泛型类型实现同一个泛型Java接口的多个实例?

来自分类Dev

Java泛型-clearList实现

来自分类Dev

如何实现Java泛型

来自分类Dev

接口与实现接口的类的泛型类型有关?

来自分类Dev

通过泛型在java中制作泛型接口

来自分类Dev

泛型类型和接口Java

来自分类Dev

接口中的Java泛型问题

来自分类Dev

泛型类型和接口Java

来自分类Dev

Java中的泛型,扩展接口

来自分类Dev

接口方法Java中的泛型类型

来自分类Dev

Java 中的泛型或继承/接口?

来自分类Dev

如何多次实现相同的接口,但使用不同的泛型?