转换一个通用变量java

时间:2014-10-24 19:24:23

标签: java generics casting

我目前还不确定如何对通用变量进行数学运算而不将它们转换为整数。不投射通用变量会破坏java中泛型的对象吗?

超级课程:

public interface someClass {

public <E> boolean test(E object);

}

问题类:

public class isOdd implements someClass {

public <E> boolean test(E object) {

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

        return false;

    }
    else {

        return true;

    }

    }

}

我不确定如何添加上限或通配符以确保对象是整数。 有没有办法改变超类泛型方法,以便它可以被其他类型使用,如String等?

感谢。

3 个答案:

答案 0 :(得分:1)

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

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

}

答案 1 :(得分:0)

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;
    }
}

答案 2 :(得分:0)

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

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;
    }
}

然后你可以实例化它:

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