2012-11-02 33 views
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)); 

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专家的人来说)但是主题是固定的。我给了你点数。再次感谢您的帮助。 [关闭]

+2

你会得到什么错误? – 2012-11-02 09:17:45

+0

可能类似'put(IAdant)类型Class_1 ist不适用于参数(Integer)' – jlordo

+0

'IImenResult'扩展IAdant吗? –

回答

3

你应该实现在Class_1方法put(Integer)这个工作

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

UPDATE 您的评论之后,我觉得这就是你正在尝试做的:

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; 
     } 
    } 
} 
+0

这不会解决问题,因为我发送Integer类的构造函数另一个我发送整数或字符串或布尔值 –

+0

好吧,看看我的更新 – MaVRoSCy

+0

感谢支持和帮助 –

3

该行:myClaass.put(new ImenResult(1).Show());将失败,因为myClaass.put()预计会得到一个实现IAdant的对象,但是您要发送并且IntegerInteger未实施IAdant

+0

我知道这一点,但问题是困难得多,因为这种方法我不能编辑,我必须发送整数或布尔或字符串或类构造函数。 –

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

第一种情况下将文件的辩论,因为,你的put方法预计IAdant(任何实现IAdant)和要传递一个整数作为展示方法将返回一个。

第二种情况会因为您的ImenResult类未执行或IAdant类型相同的原因而失败。

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

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

now myClaass.put(new ImenResult(2)); line可以解决任何编译器错误。如果你想得到第一个case myClaass.put(new ImenResult(1).Show());要编译,你必须在myClass类中重载put方法。

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

我实现你的想法,但始终是错误(同样) –

+0

@ Rafael-JuniorMVCDeveloper你仍然会得到第一种情况的错误,因为你的put方法期望IAdant的一个实例,并且你正试图传递一个int。 – PermGenError

+0

我明白,但这是学校问题,我不能编辑这个。我停止了工作,因为我有这个问题。 100%的想法发送到某些方法int,字符串,bollean或类。 –