为什么Java的String不能从Comparable接口分配

时间:2015-12-28 11:43:09

标签: java reflection

Javadoc表示String实施Comparable<String>

但是,以下代码返回false

String.class.isAssignableFrom(Comparable.class)

如何检查某个类是否实现了给定的接口?

2 个答案:

答案 0 :(得分:5)

你误解了isAssignableFrom(cls)的作用。引用Javadoc:

  

确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口。如果是这样,它返回true;否则返回false。如果此Class对象表示基本类型,则如果指定的Class参数恰好是此Class对象,则此方法返回true;否则返回true。否则返回false。

这意味着当你检查时

int ini()
{
int *tab;
int i, j, a, b;
for (i = 0; i < N; i++)
tab = (int*)malloc(N*M*sizeof(int));
if (tab == NULL)
    return -1;
scanf_s("%d  %d", &a, &b);
for (i = 0; i < N; i++)
{
    for (j = 0; j < M; j++)
    {
        *(tab + N*i +j ) = rand() % (b - a + 1) + a;
    }
}
return tab;
}


int main()
{
int i, j, *tablica = ini();
for (i = 0; i < N; i++)
{
    for (j = 0; j < M; j++)
    {
        printf("%d  ", *(tablica + N*i + j));
    }
    printf("\n");
}
system("PAUSE");
return 0;
}

你实际上正在检查String.class.isAssignableFrom(Comparable.class) 类是String类的超类,而不是相反。你应该检查:

Comparable

答案 1 :(得分:1)

您必须反转对象和参数。 而不是

String.class.isAssignableFrom(Comparable.class)

你必须使用

Comparable.class.isAssignableFrom(String.class)

来自javadoc

  

确定此Class对象表示的类或接口   相同,或者的超类或超级接口,   由指定的Class 参数表示的类或接口。它   如果是,则返回true;否则返回false。