Java中Rust的Option::iter的等价物是什么?
我有下面的Rust代码,我想把它翻译成Java,所以我首先需要理解代码Java中Rust的Option::iter的等价物是什么?,java,rust,Java,Rust,我有下面的Rust代码,我想把它翻译成Java,所以我首先需要理解代码 pub struct SimpleSelector { pub tag_name: Option<String>, pub id: Option<String>, pub class: Vec<String>, } impl Selector { pub fn specificity(&self) -> Specificity {
pub struct SimpleSelector {
pub tag_name: Option<String>,
pub id: Option<String>,
pub class: Vec<String>,
}
impl Selector {
pub fn specificity(&self) -> Specificity {
// http://www.w3.org/TR/selectors/#specificity
let Selector::Simple(ref simple) = *self;
let a = simple.id.iter().len();
let b = simple.class.len();
let c = simple.tag_name.iter().len();
(a, b, c)
}
}
如果该选项有一个值,那么它的迭代器将有一个元素进行迭代
如果该选项没有值,则其迭代器将有0个元素进行迭代
换言之,让a=simple.id.iter.len;simple.id中的元素计数,如果有id,则为1;如果没有id,则为0
len的实际计算发生在Item.size\u提示中,您可以看到它的源代码
如果是Java,则可以使用null,如
或者来自Java8,如
public class SimpleSelector {
public Optional<String> tag_name;
public Optional<String> id;
public ArrayList<String> clazz;
}
// ...
int a = id.empty() ? 0 : 1;
如果该选项有一个值,那么它的迭代器将有一个元素进行迭代
如果该选项没有值,则其迭代器将有0个元素进行迭代
换言之,让a=simple.id.iter.len;simple.id中的元素计数,如果有id,则为1;如果没有id,则为0
len的实际计算发生在Item.size\u提示中,您可以看到它的源代码
如果是Java,则可以使用null,如
或者来自Java8,如
public class SimpleSelector {
public Optional<String> tag_name;
public Optional<String> id;
public ArrayList<String> clazz;
}
// ...
int a = id.empty() ? 0 : 1;
作为对@ArtemGr答案的补充,您还可以将Option视为只能保存0或1个值的集合。Java代码可能如下所示:
public class SimpleSelector {
public ArrayList<String> tag_name;
public ArrayList<String> id;
public ArrayList<String> clazz;
}
// ...
int a = id.size();
但是在Java中使用等价物的null将被编译,但可能在运行时崩溃:
public static void thing(String id) {
id.length(); // id could be null or not-null!
}
作为对@ArtemGr答案的补充,您还可以将Option视为只能保存0或1个值的集合。Java代码可能如下所示:
public class SimpleSelector {
public ArrayList<String> tag_name;
public ArrayList<String> id;
public ArrayList<String> clazz;
}
// ...
int a = id.size();
但是在Java中使用等价物的null将被编译,但可能在运行时崩溃:
public static void thing(String id) {
id.length(); // id could be null or not-null!
}
家长问题:。可能的答案:。因此,如果id为None,则a为0;如果id为Some,则a为1。有更清晰的方法来写!例如,self.id.is_作为uint:家长问题:。可能的答案:。因此,如果id为None,则a为0;如果id为Some,则a为1。有更清晰的方法来写!例如,self.id.is_作为uint: