我有一个带有泛型类型对象的parcelable类.通常我会读出这样的对象:
in.readParcelable(MyParcelableClass.class.getClassLoader())
Run Code Online (Sandbox Code Playgroud)
显然,我不能用泛型类型变量做到这一点..请参阅下面的代码.有人能指出我正确的方向吗?
public class ParcelableOverlayItem<T extends Parcelable> extends OverlayItem implements Parcelable {
private T parcelableTypeObject;
protected ParcelableOverlayItem(Parcel in) {
this(in.readParcelable(T.class.getClassLoader())); // this is not working: "Cannot select from a type variable"
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeParcelable(parcelableTypeObject, flags);
}
public ParcelableOverlayItem(T parcelableTypeObject) {
super();
this.parcelableTypeObject = parcelableTypeObject;
}
public T getParcelableTypeObject() {
return parcelableTypeObject;
}
// ...
}
Run Code Online (Sandbox Code Playgroud) 假设我不知道一个Optional是空的,还是两个都存在.在后一种情况下,我总是想喜欢a过b:
final Optional<String> a = Optional.of("1");
final Optional<String> b = Optional.empty();
if (a.isPresent() || b.isPresent()) {
// prefer a over b
Integer result = a
.map(s -> s + "0")
.map(Integer::parseInt)
.orElseGet(() -> Integer.parseInt(b.get())); // <-- warning for b.get()
System.out.println(result);
}
Run Code Online (Sandbox Code Playgroud)
在我的真实代码中,Idea在此时警告我:
'Optional.get()'没有'isPresent()'检查.
这是为什么?我priorly检查,如果任一a或b存在.此外,此代码按预期工作,输出为10.如果我把b = Optional.of("2")输出仍然10是因为我更喜欢a.如果我然后放a = Optional.empty(),输出是2预期的.
我做错了什么,或者是Idea的错误?
我有一个Stream字符串,并将每个字符串映射到Optional<String>.由于我Optionals之后过滤了空,因此返回的流应该只包含非空的Optionals非空字符串.
为什么findFirst()扔一个NullPointerException呢?
Optional<String> cookie =
Stream.of(headers.get(HttpHeaders.SET_COOKIE), headers.get(HttpHeaders.COOKIE))
.flatMap(Collection::stream)
.filter(s -> s.contains("identifier"))
.map(this::parseCookieValue) //returns an Optional<String> from Optional.ofNullable(), null-values should result in empty Optionals
.filter(Optional::isPresent) // filters out non-present values
.map(Optional::get) // all Optionals here should have values
.findFirst(); // so why is this still throwing a NullPointerException?
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
Caused by: java.lang.NullPointerException
at com.example.services.impl.RestServiceImpl$$Lambda$11/873175411.apply(Unknown Source)
at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:267)
at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:529)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:516)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152) …Run Code Online (Sandbox Code Playgroud) 假设我在Groovy中定义了一个像这样的数组
def int[] a = [1,9]
Run Code Online (Sandbox Code Playgroud)
现在我想将这个数组转换成一个int变量,比如说a1它a1的值是19(它是数组中的值a)以任何方式执行此操作?
我正在尝试分享一篇长度超过 3000 个字符的大文本。但是,我无法将所有文本发送到 WhatsApp。
我的代码仅与 WhatsApp 共享大约 1000 个字符。
这是代码:
Intent whatsappIntent = new Intent(Intent.ACTION_SEND);
whatsappIntent.setType("text/plain");
whatsappIntent.setPackage("com.whatsapp");
whatsappIntent.putExtra(Intent.EXTRA_TEXT,data);
Run Code Online (Sandbox Code Playgroud)