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

时间:2018-01-03 11:55:03

标签: java interface default default-method

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

假设我有像

这样的界面
public interface GroupIdentifier {

    Integer getRevision();
}

我需要另一个名为getNextRevision的方法。 所以我能做的是,在同一个接口内部实现默认方法并返回下一个数字。

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;
         }
         };
    }
}

这有可能吗?

4 个答案:

答案 0 :(得分:5)

我不确定getNextRevisionIdentifier()返回GroupIdentifier实例的目的是什么。

如果您希望getNextRevisionIdentifier()返回下一个标识符,请让它返回Integer

public interface GroupIdentifier {

    Integer getRevision();

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

}

答案 1 :(得分:2)

返回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

答案 2 :(得分:2)

我相信你想写的是:

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;
    }
}

答案 3 :(得分:1)

我修复了我的解决方案,如下所示。

public interface GroupIdentifier {
    Integer getRevision();

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