ClassCastException 字符串到 MValue,java 8

ClassCastException String to MValue, java 8

我有接口

public interface MValue extends SomeOtherInterface, Serializable

我在另一个界面中使用它,就像这样

    public interface DomainObject extends Iterable<FieldValueAssociation>, Cloneable, Serializable {
     void add(DomainField field, MValue... values);
<T> T get(DomainField field);
    }

当我在其他 class 中调用它时,我设置

subDomain.add(DomainField.ZIP, d.get(DomainField.ZIP));

在 java 7 这工作正常,但在 java 8 我得到 java.lang.ClassCastException: java.lang.String cannot be cast to net.blabla.domain.MValue

d.get(DomainField.ZIP) 应该是 return 字符串,确实是,但是不能转换为 MValue,我不知道为什么?有人可以解释或推荐我参考一些文档吗?谢谢。

那有用吗?

subDomain.add(DomainField.ZIP, d.<String>get(DomainField.ZIP));

这里我明确指定 T 的类型为 String,类型检查仍然会发生,但它向编译器明确了预期的内容。 此调用应该适用于 Java 7 和 8。