从 java 接口中的默认方法调用方法

Call Method from default method in java interface

这可能是个愚蠢的问题。但我想知道有没有可能做到这一点。

假设我有类似

的界面
public interface GroupIdentifier {

    Integer getRevision();
}

我还需要另一个名为 getNextRevision 的方法。 所以我能做的是,在同一个接口和 return 下一个数字中实现默认方法。

EX :

public interface GroupIdentifier {

    //OUTER GET REVISION
    Integer getRevision();

    default GroupIdentifier getNextRevisionIdentifier() {
         return new GroupIdentifier() {
         //INNER GET REVISION
         public Integer getRevision() {
               //Here I want to return OUTER GET REVISION + 1
               return null;
         }
         };
    }
}

有没有这个可能。

Return GroupIdentifier 的新实例,您相应地为其实施 getRevision

public interface GroupIdentifier {

    //OUTER GET REVISION
    Integer getRevision();

    default GroupIdentifier getNextRevisionIdentifier() {
        //INNER GET REVISION
        Integer outer = getRevision();
        return new GroupIdentifier() {
            @Override
            public Integer getRevision() {
                return outer + 1;
            }
        }; // can be simplified to return () -> outer + 1;
    }
}

这可以是 运行,例如通过

public static void main(String[] args) {
    GroupIdentifier groupIdentifier = new GroupIdentifier() {
        @Override
        public Integer getRevision() {
            return 1;
        }
    };
    System.out.println(groupIdentifier.getNextRevisionIdentifier().getRevision());
}

正在输出

2

我不确定 getNextRevisionIdentifier() return 创建 GroupIdentifier 实例的目的是什么。

如果你想要 getNextRevisionIdentifier() 到 return 下一个标识符,让它 return 一个 Integer:

public interface GroupIdentifier {

    Integer getRevision();

    default Integer getNextRevisionIdentifier() {
        return getRevision () + 1;
    }

}

我已将我的解决方案修复如下。

public interface GroupIdentifier {
    Integer getRevision();

    default GroupIdentifier getNextRevisionIdentifier(GroupIdentifier identifier) {
        return new GroupIdentifier() {
            @Override
            public Integer getRevision() {
                return identifier.getRevision() + 1;
            }
        };
    }
}

我相信你想写的是这样的:

public interface GroupIdentifier {
    Integer getRevision();

    default GroupIdentifier getNextRevisionIdentifier() {
        return new GroupIdentifier() {
            public Integer getRevision() {
                return GroupIdentifier.this.getRevision() + 1;
            }
        };
    }
}

您只是没有找到引用封闭实例的 getRevision() 的方法。顺便说一句,如果你的界面和你发布的一样,只有一个抽象方法,那么你可以更干净地实现它:

public interface GroupIdentifier {
    Integer getRevision();

    default GroupIdentifier getNextRevisionIdentifier() {
        return () -> getRevision() + 1;
    }
}