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设置为可选
extend
EntityNameable

interface EntityNameableSelectable extends EntityNameable {
  default String selectMe() { 
    return getSomething();
  } 
}
类似地,使
EntityNameable
具有泛型
T
参数也可能不正确。在示例代码中,
T
没有做任何事情,因此您可以删除它

interface EntityNameable {
  default String getSomething() {
    return "";
  } 
}
总是一个
实体
实体名称
实体名称可选择
对吗

个人
扩展了
实体
并实现了
实体名称可选择
,但它没有实现
实体名称可选择
,否

我不知道你到底想做什么,但我怀疑
没有做你想让它做的事情。请尝试将
EntityNameable设置为可选
extend
EntityNameable

interface EntityNameableSelectable extends EntityNameable {
  default String selectMe() { 
    return getSomething();
  } 
}
类似地,使
EntityNameable
具有泛型
T
参数也可能不正确。在示例代码中,
T
没有做任何事情,因此您可以删除它

interface EntityNameable {
  default String getSomething() {
    return "";
  } 
}
interface EntityNameable {
  default String getSomething() {
    return "";
  } 
}