在java中强制转换泛型变量

在java中强制转换泛型变量,java,generics,casting,Java,Generics,Casting,我目前不确定如何在不将其转换为整数的情况下对泛型变量进行数学运算。在java中,强制转换泛型变量不是击败了泛型对象吗 超级班: public interface someClass { public <E> boolean test(E object); } 公共接口类{ 公共布尔测试(E对象); } 问题类别: public class isOdd implements someClass { public <E> boolean test(E object)

我目前不确定如何在不将其转换为整数的情况下对泛型变量进行数学运算。在java中,强制转换泛型变量不是击败了泛型对象吗

超级班:

public interface someClass {

public <E> boolean test(E object);

}
公共接口类{
公共布尔测试(E对象);
}
问题类别:

public class isOdd implements someClass {

public <E> boolean test(E object) {

    if ( (object % 2) == 0) {

        return false;

    }
    else {

        return true;

    }

    }

}
公共类isOdd实现了someClass{
公共布尔测试(E对象){
如果((对象%2)==0){
返回false;
}
否则{
返回true;
}
}
}
我不确定如何添加上界或通配符以确保对象是整数。 有没有办法更改超类泛型方法,以便其他类型(如String等)可以使用它


谢谢。

将任何内容传递给此代码肯定是错误的。我认为您关注的是java.lang.number的子类,比如Integer和Double。相反,为什么不让代码接受数字对象呢

public boolean isOdd(Number number) {
    if ( (number.longValue() % 2) == 0) {
       return false;
    }
    else {
       return true;
    }

}

Number
可能是您要查找的超类型

interface hasParity {
    public boolean isOdd();
}

public class NumberWithParity<T extends Number> implements hasParity {
    private T value;

    public NumberWithParity(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }

    @Override
    public boolean isOdd() {
        return getValue().longValue() % 2 == 1;
    }
}
接口奇偶校验{
公共布尔isOdd();
}
具有奇偶校验的公共类NumberWithParity实现了hasParity{
私人T值;
奇偶校验的公用号码(T值){
这个值=值;
}
公共T getValue(){
返回值;
}
公共无效设置值(T值){
这个值=值;
}
@凌驾
公共布尔值isOdd(){
返回getValue().longValue()%2==1;
}
}

最好的方法是使接口采用任何类型,实现使用特定类型:

public interface SomeClass<E> {
    public boolean test(E arg);
}

public class IsOdd implements SomeClass<Integer> {
    @Override
    public boolean test(Integer arg) {
        return arg % 2 == 1;
    }
}
公共接口类{
公共布尔测试(E arg);
}
公共类IsOdd实现了SomeClass{
@凌驾
公共布尔测试(整数参数){
返回参数%2==1;
}
}
然后,您可以将其实例化为:

SomeClass<Integer> realTestClass = new IsOdd();
boolean result = realTestClass.test(1);
SomeClass realTestClass=new IsOdd();
布尔结果=realTestClass.test(1);

为什么要尝试对泛型类型执行数学运算?这些操作只对特定的数据类型起作用。不应为此使用泛型。在isOdd类中具有相同数学运算的someClass的具体子类是什么?因为该类需要实现接口,并且必须具有泛型方法