我正在处理一个使用通用对象链接列表的程序,在定义单个列表的类中有一个方法可以返回该链接的值:
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
。
答案 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());
}
}
请注意,在实际实施中,S
和T
已替换为实际类型ProductDetailsDTO
和OrderDetailsDTO
。在你的情况下它会是这样的。
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);