Java通用类型问题

时间:2009-11-30 21:40:00

标签: java generics

我只是对通用类型有一个快速的问题。 我有一个接口类

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

但是,我不知道如何实现add()。 我应该检查以下

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到正确的类型? 或者有更好的方法吗? 谢谢!

3 个答案:

答案 0 :(得分: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.");
  }
}

答案 1 :(得分:1)

我认为首先你必须弄清楚你的添加方法的作用。

那说,如果传递两个String会发生什么?如果传递String和Integer怎么办?
因为通过合同你将返回一个T,如果两个“不可归属”的对象被传递,你会返回什么?

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

顺便说一句,要知道,例如,t1是否是整数,我会做的:

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

只是一点建议:尽量不要使用以小写字母开头的类名。

答案 2 :(得分:0)

这不是如何使用泛型。您无法检查T是否为整数,这不是该类所说的。它目前所说的是它可以被定义为任何类型的类,然后将这两个类加在一起,如果它只与int一起使用它将是

interfaceImp(Integer t1, Integer t2)

这显然毫无意义,因为可以很容易地添加整数。

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

你的班级做了什么,但是以方法的形式(为了让你做一些功课回答这个问题)

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

您需要通知编译器提供的类型实现接口,否则您将无法访问所需的add方法。

相关问题