单链表中的通用返回类型

时间:2017-04-09 04:21:28

标签: java generics linked-list

我正在处理一个使用通用对象链接列表的程序,在定义单个列表的类中有一个方法可以返回该链接的值:

 public class Link<E> {
      private E _value;

      public E getValue() {
           return _value;
      }

然后我想使用类型&lt;的返回值E>在链接的链接类中返回列表中某个位置的链接值

public class LinkedList <E> implements List <E> {
    public E get(int index){
        Link current = goTo(index); //go to is a helper method that returns a pointer to a Link at position index
        E value = current.getValue(); //this is the source of the problem
        return value;

    }

}

问题与泛型类型有关。 E&gt ;,我不完全了解它是如何运作的。

更新

我在源中指示的行上收到消息:Type mismatch: cannot convert from Object to E

3 个答案:

答案 0 :(得分:1)

看来你应该这样做:

Link<E> current = goTo(index);

as Link current(没有<E>)指向Object类的列表。

答案 1 :(得分:0)

实现时,必须为type参数提供实际类型。下面给出了一个样本。

package com.example.transformer;

/**
 * This represents the transformer contract to transform domain objects into
 * data transfer objects.
 *
 * @param <S>
 *            source to be transformed.
 * @param <T>
 *            result after the transformation.
 */
public interface Transformer<S, T> {
    T transform(S source);

}

这是实施,

package com.example.transformer;

import com.example.domain.dto.OrderDetailsDTO;
import com.example.domain.dto.ProductDetailsDTO;
import com.example.domain.dto.ShippingDetailsDTO;

public class ProductDetailsDTOTOOrderDetailsDTOTransformer implements Transformer<ProductDetailsDTO, OrderDetailsDTO> {
    private ShippingDetailsDTO shippingInformation;

    public ProductDetailsDTOTOOrderDetailsDTOTransformer(ShippingDetailsDTO shippingInformation) {
        super();
        this.shippingInformation = shippingInformation;
    }

    @Override
    public OrderDetailsDTO transform(ProductDetailsDTO source) {
        return new OrderDetailsDTO(source.getName(), source.getUnitPrice() + shippingInformation.getCost(),
                source.getUnitPrice(), source.getCurrency(), source.getSoldBy(),
                shippingInformation.getCourierService(), shippingInformation.getAddress(),
                shippingInformation.getCost());
    }

}

请注意,在实际实施中,ST已替换为实际类型ProductDetailsDTOOrderDetailsDTO。在你的情况下它会是这样的。

public class LinkedList <YourType> implements List <E> {
   // your code goes here ...
}

希望这会有所帮助。快乐的编码。

答案 2 :(得分:0)

我认为你的问题是这一行:Link current = goTo(index);您必须更正它以指定要使用的Object的类型:Link <TypeOfObject> current = goTo(index);将“TypeOfObject”替换为goTo方法的返回类型值。我假设它是一个Integer,所以如果是这样的话只需替换{ {1}} Link <TypeOfObject> current = goTo(index);