Java - 将不同的对象发送到接口方法

时间:2012-11-02 09:15:15

标签: java

发送时发生错误:

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));

ImenResult:

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);
    }

    }

IAdan

public interface IAdant  {

}

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

3 个答案:

答案 0 :(得分:3)

myClaass.put(new ImenResult(1).Show());将失败,因为myClaass.put()期望获得实现IAdant的对象,但您要发送IntegerInteger未实施IAdant

答案 1 :(得分: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;
        }
    }
}

答案 2 :(得分: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
}

现在myClaass.put(new ImenResult(2));行可以解决任何编译器错误。

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

public void put(int val) {
        //do your logic here
    }