Questions tagged «optional»

一个不可变的类型,可能包含值或引用。此类型的每个实例要么包含一个非null值或一个引用,要么不包含任何内容(在这种情况下,我们说该引用“不存在”;从不说它包含“包含null”)。

22
在Swift语言中,感叹号是什么意思?
Swift编程语言指南包含以下示例: class Person { let name: String init(name: String) { self.name = name } var apartment: Apartment? deinit { println("\(name) is being deinitialized") } } class Apartment { let number: Int init(number: Int) { self.number = number } var tenant: Person? deinit { println("Apartment #\(number) is being deinitialized") } } …

10
为什么要创建“隐式展开的可选项”,因为这意味着您知道存在价值?
为什么只创建一个正则变量或常量而不是创建一个“隐式展开的可选”?如果您知道可以成功解包,那么为什么首先要创建一个可选的?例如,为什么这样: let someString: String! = "this is the string" 比以下内容更有用: let someString: String = "this is the string" 如果“可选参数指示允许常量或变量具有'无值'”,但“有时从程序的结构中可以看出,可选参数在首次设置该值后将始终具有一个值”,这是什么意思呢?首先使它成为可选项?如果您知道可选值总是会有一个值,那不是使它不是可选值吗?

18
为什么在参数中不使用Java 8的Optional
我已经在许多网站上阅读了Optional应该仅用作返回类型,而不能在方法参数中使用。我正在努力找到一个合理的理由。例如,我有一段逻辑,其中包含2个可选参数。因此,我认为这样写我的方法签名是有意义的(解决方案1): public int calculateSomething(Optional<String> p1, Optional<BigDecimal> p2 { // my logic } 许多指定为Optional的网页不应用作方法参数。考虑到这一点,我可以使用以下方法签名并添加清晰的Javadoc注释以指定参数可以为null,希望以后的维护者将读取Javadoc,因此始终在使用参数之前进行null检查(解决方案2) : public int calculateSomething(String p1, BigDecimal p2) { // my logic } 另外,我可以用四个公共方法替换我的方法,以提供更好的接口,并使p1和p2更明显(解决方案3): public int calculateSomething() { calculateSomething(null, null); } public int calculateSomething(String p1) { calculateSomething(p1, null); } public int calculateSomething(BigDecimal p2) { calculateSomething(null, p2); } public …
392 java  java-8  optional 


11
Java 8的Optional.ifPresent和if-not-Present功能样式?
在Java 8中,Optional如果对象不存在,我想对其进行处理,如果对象不存在,则对它进行处理。 if (opt.isPresent()) { System.out.println("found"); } else { System.out.println("Not found"); } 但是,这不是“功能样式”。 Optional有一个ifPresent()方法,但是我无法链接一个orElse()方法。 因此,我不能写: opt.ifPresent( x -> System.out.println("found " + x)) .orElse( System.out.println("NOT FOUND")); 回复@assylias,我认为不适Optional.map()用于以下情况: opt.map( o -> { System.out.println("while opt is present..."); o.setProperty(xxx); dao.update(o); return null; }).orElseGet( () -> { System.out.println("create new obj"); dao.save(new obj); return null; }); …

13
用于可选
现在已经使用Java 8超过6个月左右,我对新的API更改感到非常满意。我仍然不自信的一个领域是什么时候使用Optional。我似乎在想要在可能存在的null任何地方都使用它而根本不在任何地方使用之间切换。 我可以使用它的情况似乎很多,而且我不确定它是否会带来好处(可读性/空安全性)或仅仅是造成额外的开销。 因此,我有一些示例,我会对社区是否Optional有益的想法感兴趣。 1-作为方法可以返回时的公共方法返回类型null: public Optional<Foo> findFoo(String id); 2-当参数可以是null: public Foo doSomething(String id, Optional<Bar> barOptional); 3-作为bean的可选成员: public class Book { private List<Pages> pages; private Optional<Index> index; } 4-在Collections: 总的来说,我不认为: List<Optional<Foo>> 添加任何内容-尤其是因为可以filter()删除null值等,但是Optionalin集合有什么好的用处吗? 我错过了任何情况吗?
271 java  java-8  optional 

13
Swift中的可选值是什么?
从Apple的文档中: 您可以使用if和let一起使用可能缺少的值。这些值表示为可选值。可选值包含一个值或包含nil以指示该值丢失。?在值的类型后写一个问号(),以将该值标记为可选。 为什么要使用可选值?
267 swift  optional 

4
为什么要使用Optional.of而不是Optional.ofNullable?
使用Java 8 Optional类时,有两种方法可以将值包装在可选值中。 String foobar = <value or null>; Optional.of(foobar); // May throw NullPointerException Optional.ofNullable(foobar); // Safe from NullPointerException 我知道这Optional.ofNullable是唯一安全的使用方法Optional,但是为什么根本不Optional.of存在呢?为什么不总是使用Optional.ofNullable 并且始终保持安全呢?

8
Optional.orElse()和Optional.orElseGet()之间的区别
我试图了解Optional<T>.orElse()和Optional<T>.orElseGet()方法之间的区别。 该orElse()方法的描述是“如果存在,则返回该值,否则返回其他”。 同时,对该orElseGet()方法的描述是“返回值(如果存在),否则调用其他值并返回该调用的结果”。 该orElseGet()方法采用Supplier功能接口,该接口基本上不接受任何参数并返回T。 您需要在哪种情况下使用orElseGet()?如果您有方法,T myDefault()为什么不做optional.orElse(myDefault())而不是做optional.orElseGet(() -> myDefault())呢? 似乎没有orElseGet()将lambda表达式的执行推迟到以后的某个时间执行,那么这有什么意义呢?(我本来以为这将是更有益的,如果它回到一个更安全的Optional<T>,其get()不会抛出一个NoSuchElementException和isPresent()始终返回true ...但显然它不是,它只是返回T像orElse())。 我还有其他区别吗?
206 java  java-8  optional 

5
Swift可选的转义闭包参数
鉴于: typealias Action = () -> () var action: Action = { } func doStuff(stuff: String, completion: @escaping Action) { print(stuff) action = completion completion() } func doStuffAgain() { print("again") action() } doStuff(stuff: "do stuff") { print("swift 3!") } doStuffAgain() 有什么方法可以使completion参数(和action)的类型Action?也保持不变@escaping? 更改类型会出现以下错误: @escaping属性仅适用于函数类型 删除该@escaping属性后,代码将编译并运行,但是由于completion闭包使函数的作用范围变大,因此似乎并不正确。


3
在Swift的if语句中使用多个let-as
我要从字典中解开两个值,在使用它们之前,我必须将它们强制转换并测试正确的类型。这是我想出的: var latitude : AnyObject! = imageDictionary["latitude"] var longitude : AnyObject! = imageDictionary["longitude"] if let latitudeDouble = latitude as? Double { if let longitudeDouble = longitude as? Double { // do stuff here } } 但是我想将两个查询打包在一起。这样就可以了: if let latitudeDouble = latitude as? Double, longitudeDouble = longitude as? Double { // …

4
为Swift中的Optional提供默认值?
在Swift中处理可选选项的习惯用法似乎过于冗长,如果您只想在nil为零的情况下提供默认值,则它是: if let value = optionalValue { // do something with 'value' } else { // do the same thing with your default value } 涉及不必要地复制代码,或 var unwrappedValue if let value = optionalValue { unwrappedValue = value } else { unwrappedValue = defaultValue } 这不需要unwrappedValue是常数。 Scala的Option monad(与Swift的Optional基本相同)具有getOrElse用于此目的的方法: val myValue = …
141 swift  optional 

6
Java中的可选orElse可选
我一直在使用Java 8中的新Optional类型,并且遇到了似乎不受功能支持的常见操作:“ orElseOptional” 考虑以下模式: Optional<Result> resultFromServiceA = serviceA(args); if (resultFromServiceA.isPresent) return result; else { Optional<Result> resultFromServiceB = serviceB(args); if (resultFromServiceB.isPresent) return resultFromServiceB; else return serviceC(args); } 这种模式有多种形式,但是归结为希望在一个可选函数上使用一个“ orElse”,该函数需要一个函数来生成一个新的可选变量,只有当当前的不存在该函数时才调用它。 它的实现如下所示: public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) { return value != null ? this : other.get(); } 我很好奇是否有这种方法不存在的原因,是否以一种意想不到的方式使用Optional,以及人们想出了什么其他方式来处理这种情况。 我应该说,我认为涉及定制实用程序类/方法的解决方案并不优雅,因为使用我的代码的人不一定知道它们的存在。 另外,如果有人知道,这种方法是否会包含在JDK 9中,我可以在哪里提出这种方法?对我来说,这似乎是对API的明显忽略。
137 java  lambda  java-8  optional  java-9 

14
Swift:测试nil的可选项
我正在使用Xcode 6 Beta4。我有这种奇怪的情况,我无法弄清楚如何适当地测试可选项。 如果我有可选的xyz,则是正确的测试方法: if (xyz) // Do something 要么 if (xyz != nil) // Do something 这些文档说是第一种方法,但是我发现有时第二种方法是必需的,并且不会生成编译器错误,但是有时,第二种方法会生成编译器错误。 我的具体示例是使用桥接到swift的GData XML解析器: let xml = GDataXMLDocument( XMLString: responseBody, options: 0, error: &xmlError); if (xmlError != nil) 在这里,如果我刚做过: if xmlError 它将始终返回true。但是,如果我这样做: if (xmlError != nil) 然后它就起作用了(就像在Objective-C中一样)。 GData XML以及它处理我缺少的可选内容的方式吗?
137 ios  swift  optional 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.