2009-11-30 74 views
-1

我只是有一个关于通用类型的简单问题。 我有一个接口类Java通用类型问题

public interface myInterface<T> { 
    T add(); 
} 

和子类

public class interfaceImp<T> implements myInterface 
{ 
    private T t1; 
    private T t2; 

    interfaceImp(T t1, T t2){ 
     this.t1 = t1; 
     this.t2 = t2; 

    } 

    public Object add() { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 

但是,我不知道如何实现附加的想法()。 我应该检查以下内容

1. t1.getClass() == Integer.class&&t2.getClass() == Integer.class</br> 
2. t1.getClass() != Integer.class&&t2.getClass() == Integer.class</br> 
3. t1.getClass() == Integer.class&&t2.getClass() != Integer.class</br> 

˚F 那么情况T1或T2为正确的类型? 还是有更好的方法呢? 谢谢!!

+0

你的add()方法应该做什么? – 2009-11-30 21:47:18

+1

我会退后一步,详细说明您认为这是“解决方案”的功能要求。 – BalusC 2009-11-30 21:49:06

+1

这大概是一个关于泛型的作业问题,“解决方案”是弄清楚它们是如何工作的。 – Chris 2009-11-30 21:53:10

回答

1

对不起,如此重要,但几乎不可能弄清楚你要在这里做什么。但要开始,

public interface MyInterface<T> 
    T add(); 
} 

public class InterfaceImp implements MyInterface<Date> { // Or whatever class you want 
    private Date t1; 
    private Date t2; 

    interfaceImp(Date t1, Date t2){ 
    this.t1 = t1; 
    this.t2 = t2; 
    } 

    public Date add() { 
    throw new UnsupportedOperationException("Not supported yet."); 
    } 
} 
+0

看起来像你更新你的问题。我们仍然需要知道你想用add()做什么。 – Mike 2009-11-30 21:48:37

+0

我正在做的是试图通过编写计算器应用程序学习一些泛型技术,所以add()将两个数字一起添加。 该计算器将具有一些基本功能,如+, - ,*,/。 此外,计算器能够做一些样本加密计算,例如两个整数的GCD。 也许计算器应用程序不是一个学习泛型的好例子,因为基本操作(+, - ,*,/)可以很容易地在不使用泛型的情况下进行。 – user200340 2009-12-01 09:45:02

1

我认为,首先你必须找出你的add方法做什么。

这就是说,如果传递两个字符串会发生什么?如果一个字符串和一个整数通过了什么?
由于通过合同你要返回一个T如果两个“不可加载”的对象通过,你会返回什么?

您正试图查看t1和t2是否为整数,但如果它们总是整数,为什么需要泛型?

顺便说一下,要知道,如果,例如,t1为整数或不是我会做了:

if(t1 instanceof Integer){ 
    //do something 
} 

只是一个小忠告:尽量不要使用,采用较低的启动类名案件信。

+0

感谢这个 “只是有一点建议:尽量不要使用以小写字母开头的类名。” – user200340 2009-12-01 09:45:55

0

这不是泛型应该如何使用。你不能检查T是否是一个整数,这不是这个班级所说的。它所目前说的是,它可以被定义为任何类型的类,并且会再加入这两个在一起,如果只与整数工作这将是

interfaceImp(Integer t1, Integer t2) 

这显然是毫无意义的整数可以很容易地添加。

相反,您会得到一个提供add方法的接口,您要做的就是确保类所实现的类型实现该接口,然后您可以使用add方法。

什么类的做法,但在方法形式(让你的作业答案,这是做了一些工作)

public <? implements myInterface> addTheseItems (<? implements myInterface> first, 
               <? implements myInterface> second) { 
     return first.add(second); 
} 

你需要告知用户提供的类型实现接口的编译器或你赢了无法访问您所需的添加方法。