Java 在另一个默认方法中从其他接口调用默认方法
此代码崩溃:Java 在另一个默认方法中从其他接口调用默认方法,java,inheritance,interface,java-8,default-method,Java,Inheritance,Interface,Java 8,Default Method,此代码崩溃: 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() {
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 {
}
它崩溃是因为无法将person
强制转换为EntityNameable
。为什么不呢?人
总是一个实体
,实体名称
和实体名称可选择
对吗
我还想知道为什么我需要将此转换为EntityNameable
来调用方法getSomething
,因为每个实现类都应该有该方法。为什么需要演员?这和坠机事件有关
我还想知道为什么我需要将此转换为EntityNameable来调用方法getSomething,因为每个实现类都应该有该方法
EntityNameableSelectable
不是EntityNameable
EntityNameableSelectable
不扩展该接口,因此不会继承任何方法
您可能希望EntityNameableSelectable
扩展EntityNameable
,以便能够调用getSomething()
我还想知道为什么我需要将此转换为EntityNameable来调用方法getSomething,因为每个实现类都应该有该方法
EntityNameableSelectable
不是EntityNameable
EntityNameableSelectable
不扩展该接口,因此不会继承任何方法
您可能希望EntityNameableSelectable
扩展EntityNameable
,以便能够调用getSomething()
人
总是一个实体
,实体名称
和实体名称可选择
对吗
个人
扩展了实体
并实现了实体名称可选择
,但它没有实现实体名称可选择
,否
我不知道你到底想做什么,但我怀疑
没有做你想让它做的事情。请尝试将EntityNameable设置为可选
extendEntityNameable
:
interface EntityNameableSelectable extends EntityNameable {
default String selectMe() {
return getSomething();
}
}
类似地,使EntityNameable
具有泛型T
参数也可能不正确。在示例代码中,T
没有做任何事情,因此您可以删除它
interface EntityNameable {
default String getSomething() {
return "";
}
}
人
总是一个实体
,实体名称
和实体名称可选择
对吗
个人
扩展了实体
并实现了实体名称可选择
,但它没有实现实体名称可选择
,否
我不知道你到底想做什么,但我怀疑
没有做你想让它做的事情。请尝试将EntityNameable设置为可选
extendEntityNameable
:
interface EntityNameableSelectable extends EntityNameable {
default String selectMe() {
return getSomething();
}
}
类似地,使EntityNameable
具有泛型T
参数也可能不正确。在示例代码中,T
没有做任何事情,因此您可以删除它
interface EntityNameable {
default String getSomething() {
return "";
}
}
interface EntityNameable {
default String getSomething() {
return "";
}
}