无法将用户对象用作的参数?在Java泛型中扩展用户

无法将用户对象用作的参数?在Java泛型中扩展用户,java,generics,Java,Generics,我使用泛型有困难。首先我宣布 public class SymmetricIndexedRealMatrix<T> implements iIndexedMatrix<T,T, Double>{ public Double getElement(T rowObject, T columnObject) { ... } } 公共类SymmetricIndexederMatrix实现iIndexedMatrix{ 公共双getElement(T rowObject,

我使用泛型有困难。首先我宣布

public class SymmetricIndexedRealMatrix<T> implements iIndexedMatrix<T,T, Double>{
    public Double getElement(T rowObject, T columnObject) { ... }
}
公共类SymmetricIndexederMatrix实现iIndexedMatrix{
公共双getElement(T rowObject,T columnObject){…}
}
然后

公共类CRF{
私有对称性矩阵二进制能量;
专用标签盒;
公共对称性ExedRealMatrix getBinaryEnergy(){
返回双核能量;
}
公共集getLabelSet(){
返回标签集;
}
...
}
然后我使用这部分代码

CRF<? extends User> crf = new CRF<User>(sourceGraph, targetGraph.getElements(User.class), getUnaryEnergyComputer(), getBinaryEnergyComputer()
...
for (User targetUser1 : crf.getLabelSet()) {
    for (User targetUser2 : crf.getLabelSet()) {
        System.out.print(crf.getBinaryEnergy().getElement(targetUser1, targetUser2) + " ");
    }
    System.out.println();
}

CRF只需声明
CRF
类型为
CRF
;或者,如果您确实需要通配符类型,
CRF假设您有两个子类扩展
User
-
SubUser1
SubUser2

以下代码是可能的:

CRF<? extends User> crf = new CRF<SubUser1>(...);
User targetUser1 = new SubUser2();
User targetUser2 = new SubUser2();

将解决错误。

添加到代码块的
crf.getBinaryEnergy()的类型是什么?@Eran。另外,我在发布索引矩阵的类型时犯了一个错误。现在这里是正确的。编译错误消息中的
节点是什么?我在你的代码中看不到任何节点。@Eran哦,我的粗心又一次改变了,改变了错误消息。我试图按照你建议的方式解决问题,但没有改变,我仍然得到完全相同的错误消息。@,当我创建CRF时,使用用户对称矩阵参数化的对象被创建并使用相同类型参数化。然后我使用getElement(subuser1u1,subuseru2)方法,将u1和u2视为用户的对象,因此它们的子类的类型应该无关紧要。我哪里错了?又是我的错,改变了代码块。如果这很重要,我会用
crf谢谢你!现在已经开始工作了——问题是,在代码中,它不是
crf.getBinaryEnergy()
,而是
uir.getCRF().getBinaryEnergy()
,在类中
uir
方法
CRFIt可以
,即

CRF<? extends User> crf = new CRF<SubUser1>(...);
User targetUser1 = new SubUser2();
User targetUser2 = new SubUser2();
CRF<User> crf = new CRF<User> (...);