【问题标题】:Defining types on object creation like HashMap<type here>在对象创建上定义类型,如 HashMap<type here>
【发布时间】:2012-12-28 17:37:01
【问题描述】:

非常简单的问题,我实现了一个数组枚举类,但不记得如何在 nextElement() 方法上获取正确的类型。代码如下...

public class ArrayEnumeration<Object> implements Enumeration<Object> {
    private Object[] data;
    private int n = 0;

    public ArrayEnumeration(Object[] data) {
        this.data = data;
    }

    @Override
    public boolean hasMoreElements() {
        return n < data.length;
    }

    @Override
    public Object nextElement() {
        n++;
        return data[n - 1];
    } 
}

所以从 nextElement 方法返回的对象应该是创建类时定义的类型。我只是不记得该怎么做。好烦!!!

非常感谢。

【问题讨论】:

  • 您是否有理由使用 Enumeration 并为自己执行此操作,而不是使用现代集合 API?
  • 你指的是哪个现代 api?不知道这个任务的存在。顺便说一句,我正在转换我的应用程序参数以将其用于类似的参数。 -appname .
  • 没有人使用Enumeration了;您正在做的事情的典型实现是单线 Arrays.asList(array).iterator()
  • 希望我在一小时前就知道了,谢谢。

标签: java object types


【解决方案1】:

查看java.util.List的源码示例:

public interface List<E> extends Collection<E> {

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/List.java

然后您的方法使用泛型类型:

public boolean add(E e);

public E get(int index);

来源java.util.List..

所以在你的情况下:

public class ArrayEnumeration<E> implements Enumeration<E> {

    ...

    @Override
    public E nextElement() {
        n++;
        return data[n - 1];
    } 
}

【讨论】:

    【解决方案2】:

    使用类型参数:

    public class ArrayEnumeration<T>
        implements Enumeration<T> 
    {
        private T[] data;
    
        public ArrayEnumeration(T[] data)
        {
            this.data = data;
        }
    
        // ...
        public T nextElement() {}
    }
    

    另外,您应该考虑改用Iterator。但无论如何,数组都实现了Iterable,那你为什么要这样做呢?

    【讨论】:

      猜你喜欢
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多