从 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;
}
}
这可能是个愚蠢的问题。但我想知道有没有可能做到这一点。
假设我有类似
的界面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;
}
}