gpt4 book ai didi

java - 使用泛型 java 实现接口(interface)

转载 作者:行者123 更新时间:2023-11-30 08:15:59 25 4
gpt4 key购买 nike

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

可实现类.java:

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

public void insertObject(E obj);

public E removeObj(E obj);

}

主要.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类型(泛型值)。据我了解,接口(interface)只是必须在“实现”它们的类中使用的方法的“蓝图”。从基本的角度来看,这里不能有任何变数。话虽如此,正如您可能看到的那样,我确实也在 Main 中的 ImplementableClass 中声明了方法。话虽如此,我有几个问题:

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

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

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

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

最佳答案

When declaring my methods from ImplementableClass class in my Array class, this "overrides" the methods from my ImplementableClass class right?

是的(好吧,从技术上讲不是因为接口(interface)中没有要覆盖的功能,但是您可以使用 @Override 来指示您正在覆盖它)

Since "E obj" is the argument in both methods, do they have to be the same whenever I declare my methods in my Array class? What should I pass to the methods? What does "E obj" mean?

它们需要与您在实现接口(interface)时指定的通用类型相同。 E obj 表示您已经声明了一个名为 obj 的参数,该参数属于泛型 E。这意味着您需要定义将特定类型作为参数的方法。

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

public class ArrayClass implements ImplementableClass<Integer>

所以你可以有这样的方法:

public void insertObject(Integer obj) {}

public Integer removeObj(Integer obj) {}

或者你可以让你的 Array 类泛化,并将泛型类型的规范留给调用者:

public class ArrayClass<E> implements ImplementableClass<E>

I want to create an array that can hold objects of type E. This means that whenever I instantiate a new object-> Array theArray = new Array I can call the methods I have on my Array class on theArray instance right? (i.e theArray.removeLastObject() ) What should I pass as an argument?

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

Why would Iterable be of use in this case?

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

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

HTH

关于java - 使用泛型 java 实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28575864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com