When I tried to run the code below, the compiler generates
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: JTOGenerics.ArrayCode.countGreaterThan at JTOGenerics.ArrayCode.main(ArrayCode.java:17) Java Result: 1
There is a red line beneath the line of code: int av = ArrayCode.countGreaterThan(marks, 10);
I'm new to Java and due to my limited knowledge, I tried and failed to locate the error, could someone please help me out? Many thanks in advance!!
public class ArrayCode<T> implements Comparable<T> {
    public static void main(String[] args) {
        Integer[] marks = new Integer[] {12, 0, 15, 18, 4};
        int av = ArrayCode.countGreaterThan(marks, 10);
        System.out.println("the number of Marks that are greater than 10 is: " + av);
    }
    public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) {
        int count = 0;
        for (T e : anArray) {
            if (((Comparable<T>)e).compareTo(elem) > 0) {
                ++count;
            }
        }
        return count;
    }
    @Override
    public int compareTo(T o) {
        if (this.equals(o)) {
            return 1;
        } else {
            return 0;
        }
    }
    public interface Comparable<T> {
        public int compareTo(T o);
    }
}
                You've defined your own Comparable interface within the ArrayCode class.  It appears that the type bound for the generic static method countGreaterThan is resolving to that Comparable interface.  However, Integer implements the built-in java.lang.Comparable interface instead.
Remove your own Comparable interface, which means Comparable will refer to the built-in Comparable interface.
In addition, the ArrayCode class doesn't need to implement Comparable itself (unless there is other non-static code that we aren't seeing in your post); you can remove implements Comparable<T> on ArrayCode, ArrayCode's own T type parameter, and ArrayCode's compareTo method also.  Plus, you don't need the cast to Comparable<T> in the if condition; it's unnecessary.
It's because you've created your own interface called Comparable.
Integer does not implement your version.
I would just get rid of your version.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With