@RequestMapping(value = "/contact.html", method = RequestMethod.POST)
public final ModelAndView contact(
@RequestParam(value = "name", required = false) Optional<String> name) {
Run Code Online (Sandbox Code Playgroud)
如果不需要参数值且没有发送任何内容,Spring如何@RequestMapping处理Optional来自Guava库的内容?
那将会:
nullOptional.absent()可以Optional.fromNullable(T)用来接受请求吗?
我正在使用这个正则表达式:
((?:[a-z][a-z]+))_(\d+)_((?:[a-z][a-z]+)\d+)_(\d{13})
Run Code Online (Sandbox Code Playgroud)
匹配这样的字符串:
SH_6208069141055_BC000388_20110412101855
Run Code Online (Sandbox Code Playgroud)
分为4组:
SH
6208069141055
BC000388
20110412101855
Run Code Online (Sandbox Code Playgroud)
问题:如何使第一组可选,以便生成的组是空字符串?
在可能的情况下,我想在每种情况下获得4组.
这种情况的输入字符串:(第一组后没有下划线)
6208069141055_BC000388_20110412101855
Run Code Online (Sandbox Code Playgroud) 我有一个活动,在Web请求完成时膨胀视图.这个视图的一些小部件必须附加到一个onClick方法,所以我有:
@OnClick({R.id.bt1, R.id.bt2, R.id.inflated_bt1, R.id.inflated_bt2})
public void onClick(View view) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
由于R.id.inflated_bt1和R.id.inflated_bt2创建应用程序时不存在,它抛出一个异常提示设置一个@Optional注解.
找不到方法'onClick'的ID为XXXXXXXX的必需视图'inflated_bt1'.如果此视图是可选的,请添加"@Optional"注释.
有没有办法用@Optional注释设置一些视图,并在视图膨胀时注入它们?或者,还有另一种方法吗?
谢谢
在Rust中,我认为处理可恢复错误的惯用方法是使用Result.例如,这个功能显然是惯用的:
fn do_work() -> Result<u64, WorkError> {...}
Run Code Online (Sandbox Code Playgroud)
当然,还有一些具有单一,明显的故障状态的功能,因此使用Option类型.一个惯用的例子是这样的:
fn do_work() -> Option<u64>
Run Code Online (Sandbox Code Playgroud)
这一切都在文档中直接解决.但是,我对函数可能失败的情况感到困惑,但在成功时没有任何有意义的值.比较以下两个功能:
fn do_work() -> Option<WorkError>
// vs
fn do_work() -> Result<(), WorkError>
Run Code Online (Sandbox Code Playgroud)
我只是不确定哪一个更惯用,或者更常用于现实世界的Rust代码.我这样的问题的首选资源是Rust书,但我不认为这是在" 错误处理 "部分中解决的.我也没有任何其他Rust文档的运气.
当然,这似乎是相当主观的,但我正在寻找权威的来源,要么说明哪种形式是惯用的,要么说明为什么一种形式优于(或劣等)另一种形式.(我也很好奇这个约定如何与其他大量使用"错误作为值"的语言相比,比如Go和Haskell.)
我想做这样的事情:
private String getStringIfObjectIsPresent(Optional<Object> object){
object.ifPresent(() ->{
String result = "result";
//some logic with result and return it
return result;
}).orElseThrow(MyCustomException::new);
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为ifPresent将Consumer功能接口作为参数,其具有void accept(T t).它不能返回任何值.还有其他办法吗?
libstdc ++(GNU)和libc ++(LLVM)都std::optional使用联合实现值存储,并且它们都包含一个虚拟成员。
GNU实现:
using _Stored_type = remove_const_t<_Tp>;
struct _Empty_byte { };
union {
_Empty_byte _M_empty;
_Stored_type _M_payload;
};
Run Code Online (Sandbox Code Playgroud)
LLVM实施:
union
{
char __null_state_;
value_type __val_;
};
Run Code Online (Sandbox Code Playgroud)
我的问题是:我们为什么需要这些_M_empty/ __null_state_会员?单成员工会有什么问题吗?
我认为初始化std::optionalwith与std::nullopt默认构造相同。
它们在cppreference中的描述与形式(1)相同。
但是,Clang和GCC似乎都不同地对待这些玩具示例函数。
#include <optional>
struct Data {
char large_data[0x10000];
};
std::optional<Data> nullopt_init() {
return std::nullopt;
}
std::optional<Data> default_init() {
return {};
}
Run Code Online (Sandbox Code Playgroud)
编译器资源管理器似乎暗示使用std::nullopt会简单地设置“ contains”标志,
nullopt_init():
mov BYTE PTR [rdi+65536], 0
mov rax, rdi
ret
Run Code Online (Sandbox Code Playgroud)
虽然默认构造将值初始化整个类。这在功能上是等效的,但几乎总是比较昂贵。
default_init():
sub rsp, 8
mov edx, 65537
xor esi, esi
call memset
add rsp, 8
ret
Run Code Online (Sandbox Code Playgroud)
这是故意行为吗?什么时候应该优先使用另一种形式?
看一个Swift 示例:
if let sourceViewController = sender.sourceViewController as? MealViewController, meal = sourceViewController.meal {
...
}
Run Code Online (Sandbox Code Playgroud)
该文件指出:
...代码将视图控制器分配给本地常量sourceViewController,并检查sourceViewController上的meal属性是否为nil.
问题:当用逗号分隔时,Swift是否允许你在if语句中有多个条件(如本例中的逗号后面所示MealViewController)?
在文档中没有看到这个.
我已经阅读了OptionalJava 8中的目的(遗憾的是我不记得在哪里),我很惊讶作者没有提到在类中使用an Optional作为属性.
由于我在课堂上经常使用选项,我想知道这是不是很好.或者我可以更好地使用普通属性,null它们在未设置时返回?
注意:看起来我的问题可能是基于意见的,但我觉得Optional在课堂上使用的感觉真的不是要走的路(看完上面提到的帖子后).但是,我喜欢使用它,并且找不到使用它的任何缺点.
例
我想举一个例子来澄清.我有一个类Transaction,它是这样构建的:
public class Transaction {
private Optional<Customer> = Optional.empty();
....
Run Code Online (Sandbox Code Playgroud)
VS
public class Transaction {
private Customer = null;
....
Run Code Online (Sandbox Code Playgroud)
当在一个检查Customer,我认为这是最合理的使用transaction.getCustomer().isPresent()比transaction.getCustomer() != null.在我看来,第一个代码比第二个代码更清晰.
我对Optional.ofNullable方法感到惊讶.有一天我写了一个应该返回Optional的函数:
private Optional<Integer> extractFirstValueFrom(InsightsResponse insight) {
return Optional.ofNullable(insight.getValues().get(0).getValue());
}
Run Code Online (Sandbox Code Playgroud)
我错误地认为Optional.ofNullable会阻止任何NullPointerExceptions内部的参数表达.
现在我想我知道这是非常愚蠢的想法.Java必须首先解析参数以将其传递给Optional.ofNullable调用.
但我有一个问题.有没有一个很好的方法来实现我的目标?我想从表达式获取insight.getValues().get(0).getValue()一些Integer值或null.Null可以是表达式中的每一个:insight.getValues()或insight.getValues().get(0).
我知道我可以把它放在try/catch块中,但我想知道是否有更优雅的解决方案.
optional ×10
java ×3
c++ ×2
c++17 ×2
java-8 ×2
android ×1
butterknife ×1
guava ×1
idiomatic ×1
if-statement ×1
ios ×1
lambda ×1
nullable ×1
onclick ×1
regex ×1
regex-group ×1
rust ×1
rust-result ×1
spring ×1
spring-mvc ×1
swift ×1
unions ×1