1

当我发送这个时我有错误:

myClaass.put(new ImenResult(1).Show());
myClaass.put(new ImenResult(2));

我明白为什么我会遇到这个问题,因为我发送到具有接口参数的类。我的问题是:我必须添加到接口以发送此数据并且没有出错,因为此结构必须相同(不是我的决定),因为稍后我可以发送字符串或其他东西(类)。我知道这是一个非常困难的问题。

程序:

Class_1 myClaass = new Class_1();
myClaass.put(new ImenResult(1).Show());
myClaass.put(new ImenResult(2));
myClaass.put(new ImenResult(3));

Imen结果:

public class ImenResult implements IImenResult{

    public Integer i;

    public ImenResult(Integer  i ) {
        this.i = i;
    }

    @Override
    public Integer Show() {

        return i;
}

Class_1

public class Class_1 implements IQRack{

    public List<IAdant> adan;


    public void put(IAdant value) {
        adan.add(value);
    }

    }

伊丹

public interface IAdant  {

}

感谢您的帮助,我告诉过您这是一个困难的问题(当然对于不是 Java 专家的人来说),但主题是固定的。我给你加分了。再次感谢您的帮助。[关闭]

4

3 回答 3

3

您应该实现该方法put(Integer)Class_1使其正常工作

public class Class_1 implements IQRack {

    public List<IAdant> adan;

    public void put(IAdant value) {
        adan.add(value);
    }

    void put(Integer Show) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

更新 在您发表评论后,我认为这就是您要尝试做的事情:

public class Class_1 implements IQRack {

    private List<IAdant> adan = new ArrayList<IAdant>();

    public Class_1(IAdant i) {
        this.put(i);
    }

    void put(IAdant Show) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

public class IAdant {

    Boolean bValue;
    String sValue;
    Integer iValue;

    public IAdant(Object o) {
        if (o.getClass().isInstance(new Integer(1))) {
            iValue = (Integer) o;
        } else if (o.getClass().isInstance(false)) {
            bValue = (Boolean) o;
        } else if (o.getClass().isInstance("")) {
            sValue = (String) o;
        }
    }
}
于 2012-11-02T09:25:39.483 回答
3

行:myClaass.put(new ImenResult(1).Show());将失败,因为myClaass.put()期望获得一个实现的对象IAdant,但您正在发送 and IntegerInteger不执行IAdant

于 2012-11-02T09:19:49.947 回答
2
myClaass.put(new ImenResult(1).Show());
myClaass.put(new ImenResult(2));

第一种情况是文件,因为您的 put 方法需要 IAdant(任何实现 IAdant 的方法),并且您正在传递一个整数,因为 show 方法将返回一个。

第二种情况会失败,原因与您的 ImenResult 类未实现或 IAdant 类型相同。

如果您希望第二种情况起作用,请在 ImenResult 类中实现 IAdant。

public class ImenResult implements IImenResult,IAdant{
//implement the methods from both the interfaces
}

nowmyClaass.put(new ImenResult(2));行可以在没有任何编译器错误的情况下工作。

如果你想得到第一个案例 myClaass.put(new ImenResult(1).Show()); 要编译,您必须重载 myClass 类中的 put 方法。

public void put(int val) {
        //do your logic here
    }
于 2012-11-02T09:22:41.420 回答