我正在编写一些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中声明了这些方法。话虽如此,我有几个问题:
当在Array类中从ImplementableClass类声明我的方法时,这“覆盖”了我ImplementableClass类中的方法,对吗?
由于“ E obj”是这两个方法的参数,所以每当我在Array类中声明我的方法时,它们是否必须相同?我应该把什么传递给方法?“ E obj”是什么意思?
我想创建一个可以容纳E类型对象的数组。这意味着每当实例化一个新对象时,Array<Integer> theArray = new Array<Integer>
我就可以在Array实例上调用我的Array类上的方法了吗?(即theArray.removeLastObject())我应该作为参数传递什么?
为什么Iterable<E>
在这种情况下有用?
当在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] 删除。
我来说两句