【问题标题】:Simple Q Iterator <Object E> of Abstract Class抽象类的简单Q迭代器<Object E>
【发布时间】:2013-04-07 03:00:17
【问题描述】:

大家好,你们能告诉我明天吗??

嗯, 我不使用 java.util.iterator 来创建我的迭代器接口,只是创建我自己的所以

我有 2 个迭代器:AccountIterator / FileIterator,我的目标是将抽象对象“Account”和对象“File”迭代到“deafult”包中的主类

(还有2个对AbstractAccount.class的扩展(BasicClass.class / PremiumClass.class,AbstractAccount.class实现了Account.interface)

有我的迭代器接口:

package cs;

public interface Iterator<E> {
    public void init() ;
    public boolean hasNext();
    public E next();
}

有我的帐户迭代器

http://i.stack.imgur.com/w0avp.png

我不能使用演员表,任何想法 Cumps,抱歉英语不好

【问题讨论】:

    标签: java interface casting iterator abstract-class


    【解决方案1】:

    只需修改类头即可指定对象类型。

    使用

    public class AccountIterator implements Iterator<Account>
    

    而不是一般

    public class AccountIterator<E> implements Iterator<E>
    

    您必须将 E 更改为 Account。

    【讨论】:

    • 感谢您的快速帮助(:还有一个问题?在我的界面帐户中(扩展到 2 个不同的类)我有:“Iterator itFiles();”如果迭代器返回到 Main.class它返回 FileIterator 我将 E 更改为 File (File.interface) 如果迭代器返回 AccountIterator 我将 E 更改为 Account (Account.interface)
    【解决方案2】:

    您已使用 E 类型参数化您的类,但您的帐户数组的类型为 Accountaccounts[index] 返回 Account 而不是 E

    您可能打算实现Iterator&lt;Account&gt;。将类签名更改为此...

    public class AccountIterator<E> implements Iterator<Account>
    

    然后,Impl 将处理您的通用偏好,并且会成功。

    class MyIter implements Iterator<String>
    {
        String [] arr = new String[10];
    
        public void init()
        {
        }
    
        public boolean hasNext()
        {
            return false;
        }
    
        public String next()
        {
            return arr[1];
        }
    }
    

    【讨论】:

    • 感谢您的快速帮助(:还有一个问题?在我的界面帐户中(扩展到 2 个不同的类)我有:“Iterator itFiles();”如果迭代器返回到 Main.class它返回 FileIterator 我将 E 更改为 File (File.interface) 如果迭代器返回 AccountIterator 我将 E 更改为 Account (Account.interface)
    • 如果我理解正确,您希望根据 Iterator 类型返回 FileAccount。是的,您可以在要返回相应类型的地方使用&lt;File&gt;&lt;Account&gt;
    • 非常感谢 \o/ 它的所有类现在都在工作,在 main 中较少(列出所有用户时没有任何反应) private static void listAll(Server srv, Scanner in) { Iterator itAccounts = srv .itAccounts(); itAccounts.init(); while(itAccounts.hasNext()){ 账户 a = itAccounts.next(); a.getEmail(); } System.out.println("DF"); }
    猜你喜欢
    • 2021-12-17
    • 2011-04-27
    • 2018-02-06
    • 1970-01-01
    • 2014-02-02
    • 2014-03-14
    • 1970-01-01
    • 2015-04-17
    • 2012-11-20
    相关资源
    最近更新 更多