此代码崩溃:
#include<stdio.h>
int main()
{
int i=0;
char a[6];
for(i=0;i<6;i++)
{
printf("%d-)Enter a character : ",i+1); scanf("%s",&a[i]);
}
for(i=0;i<6;i++)
{
printf("Value of %d. element in Array : %c\n",i+1,a[i]);
}
return 1903; //Beşiktaş Football Club was founded in 1903 :)
}
可以通过将其粘贴到https://www.jdoodle.com/online-java-compiler
中来执行此代码。public class MyClass {
public static void main(String args[]) {
Person person = new Person();
person.selectMe();
}
}
class Entity {}
interface EntityNameable<T extends Entity> {
default String getSomething() {
return "";
}
}
interface EntityNameableSelectable<T extends EntityNameable> {
default String selectMe() {
return ((EntityNameable) this).getSomething();
}
}
class Person extends Entity implements EntityNameableSelectable {
}
它崩溃是因为无法将Exception in thread "main" java.lang.ClassCastException: Person cannot be cast to EntityNameable
at EntityNameableSelectable.selectMe(MyClass.java:18)
at MyClass.main(MyClass.java:4)
强制转换为person
。为什么不? EntityNameable
始终是person
,Entity
和EntityNamable
对吗?
我还想知道为什么我需要将其强制转换为EntityNameableSelectable
才能调用方法EntityNameable
,因为每个实现类都应具有该方法。为什么需要演员表?它与崩溃有关系...
答案 0 :(得分:2)
我还想知道为什么我需要将其强制转换为EntityNameable才能调用方法getSomething,因为每个实现类都应具有该方法。
new_list = [if ??? y
for x in nested_list
for y in x]
不是EntityNameableSelectable
。 EntityNameable
不会扩展该接口,因此不会继承任何方法。
可能您希望EntityNameableSelectable
扩展EntityNameableSelectable
,因此您可以呼叫EntityNameable
。
getSomething()
interface EntityNameableSelectable<T extends Entity> extends EntityNameable<T> { default String selectMe() { return getSomething(); } }
始终是Person
,Entity
和EntityNamable
,对吧?
仅当EntityNameableSelectable
扩展了EntityNameableSelectable
或EntityNameable
实现Person
时。
如果您如上所述定义EntityNameable
,则EntityNameableSelectable
类如下:
Person
答案 1 :(得分:2)
Person
始终是Entity
,EntityNamable
和EntityNameableSelectable
对吗?
Person
扩展了Entity
并实现了EntityNameableSelectable
,但没有实现EntityNameable
,不。
我不确定您到底想做什么,但是我怀疑<T extends EntityNameable>
没有按照您的意愿去做。尝试让EntityNameableSelectable
扩展EntityNameable
:
interface EntityNameableSelectable extends EntityNameable {
default String selectMe() {
return getSomething();
}
}
类似地,使EntityNameable
具有通用的T
参数也不正确。在示例代码T
中没有执行任何操作,因此您可以将其删除。
interface EntityNameable {
default String getSomething() {
return "";
}
}