我只是对通用类型有一个快速的问题。 我有一个接口类
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到正确的类型? 或者有更好的方法吗? 谢谢!
答案 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方法。