我在课堂上使用泛型。 MyObject 必须使用T作为类,例如新的MyObject(Long.class)。在 equal 方法中,我想确保给该方法的参数是T的实例。
我知道 Object<T>
不是有效的Java源代码。
我将它添加到代码示例中以向您显示我的意思,即该值是T的实例。
但是实现等于方法的正确方法是什么?
public class MyObject<T extends Class> {
public boolean equal(Object<T> value) {
return true;
}
}
答案 0 :(得分:1)
如果你覆盖了equals()
方法,那么你应该检查用于比较相等性的对象的类。
Object
如果您没有覆盖equals()
,我会将您的方法名称更改为 distinct 。否则生活将变得非常混乱。
答案 1 :(得分:0)
Assuming that you don't want to override equals
。我认为你应该在下面做
public class MyObject<T> {
public boolean isEquals(T obj) {
return false;
};
}
当您将Class
传递给Type
MyObject
MyObject<Long> myObject = new MyObject<Long>();
myObject.isEquals(Long.valueOf(10);//It will only allow Long
myObject.isEquals(10); //Fails for int
参考
答案 2 :(得分:0)
假设您不以覆盖Object.equals(Object)
:
T extends Class
没有多大意义,因为Class
无论如何都是最终的,所以对T
Class<U>
U
唯一可能是U
,然后你不妨让public class MyClass<T> {
private Class<T> cl ;
public MyClass(Class<T> cl) {
this.cl = cl ;
...
}
public boolean equal(T value) {
return true;
}
}
成为类型参数。所以你可能会想要它:
new MyClass<Long>(Long.class)
然后你可以写cl
。
但是你确定需要在运行时存储new MyClass<Long>()
参数吗?通常你会把它完全留下来,所以你只需要写{{1}}。