Java 提供给orElse()的方法不会完全执行
在下面的代码中,我试图理解java-8中提供的可选的概念。我创建以下示例是为了掌握orElse()背后的原理。 执行代码后,将执行并返回defaultMethod()的主体Java 提供给orElse()的方法不会完全执行,java,android,java-8,optional,Java,Android,Java 8,Optional,在下面的代码中,我试图理解java-8中提供的可选的概念。我创建以下示例是为了掌握orElse()背后的原理。 执行代码后,将执行并返回defaultMethod()的主体 new User("DEFAULT_USER", "default@gmail.com", "0000", null); 反对y。日志语句按照我的预期打印了正确的数据 问题是,为什么defaultMethod()中的所有日志都没有打印??引入is-orElse()仅返回值,而不执行所提供方法的整个主体 代码: @Over
new User("DEFAULT_USER", "default@gmail.com", "0000", null);
反对y。日志语句按照我的预期打印了正确的数据
问题是,为什么defaultMethod()中的所有日志都没有打印??引入is-orElse()仅返回值,而不执行所提供方法的整个主体
代码:
@Override
protected void onResume() {
super.onResume();
User user_1 = this.getUser_1();
User user_2 = this.getUser_2();
User user_3 = this.getUser_3();
User y = OptionalsUtils.toOptional(user_1)
.map(u1 -> this.getUser_3())
.orElse(this.defaultMethod());
Log.i(TAG_LOG, "orElse->y: " + y.getUserName());
}
private User getUser_3() {
List<String> list = new ArrayList<String>(5);
list.add("espn");
list.add("qtv");
list.add("der Spiegel");
list.add("deutsch welle");
User user = new User();
user.setUserName("johannas");
user.setUserEmailAddres("joha90@gmail.com");
user.setUserId("2345");
user.setUserFavoritesTvList(null);
return null;
}
private User defaultMethod() {
Log.w(TAG_LOG, "defaultMethod is called1");
Log.w(TAG_LOG, "defaultMethod is called2");
Log.w(TAG_LOG, "defaultMethod is called3");
Log.w(TAG_LOG, "defaultMethod is called4");
Log.w(TAG_LOG, "defaultMethod is called5");
Log.w(TAG_LOG, "defaultMethod is called5");
Log.w(TAG_LOG, "defaultMethod is called5");
Log.w(TAG_LOG, "defaultMethod is called5");
return new User("DEFAULT_USER", "default@gmail.com", "0000", null);
}
2018-12-17 12:46:15.774 20158-20158/com.example.optionals_00 W/ActMain: defaultMethod is called1
2018-12-17 12:46:15.774 20158-20158/com.example.optionals_00 W/ActMain: defaultMethod is called2
2018-12-17 12:46:15.774 20158-20158/com.example.optionals_00 W/ActMain: defaultMethod is called3
2018-12-17 12:46:15.774 20158-20158/com.example.optionals_00 W/ActMain: defaultMethod is called4
2018-12-17 12:46:15.774 20158-20158/com.example.optionals_00 W/ActMain: defaultMethod is called5
2018-12-17 12:46:15.774 20158-20158/com.example.optionals_00 W/ActMain: defaultMethod is called5
2018-12-17 12:46:15.774 20158-20158/com.example.optionals_00 I/ActMain: orElse->y: DEFAULT_USER
这不是与
orElse
相关的问题。Logcat
将跳过缺少的这两行,因为它们是相同的
如果Logcat检测到重复的日志,它将只显示第一个和最后一个日志,在这两个日志之间,您应该能够看到与此类似的消息:
04-16 03:24:21.591 I:uid=10085(u0_a85)xxx.yyy.zzz相同的两行
这种行为始于Android Studio的版本
3.1
。为了解决这个问题,很多人不喜欢它,所以它在Android Studio的3.2版本中被删除。因此,如果您使用Android Studio3.0
或3.2
,则应显示所有日志,即使它们是相同的。日志记录器是否可能决定不记录您传递给它的某些字符串,因为您传递了相同的字符串4次?