小编Bla*_*ght的帖子

如何从类型变量获取ClassLoader(使用泛型对类进行分区)

我有一个带有泛型类型对象的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)

java generics android parcelable

6
推荐指数
1
解决办法
1728
查看次数

为什么Idea lint警告缺少`isPresent()`检入`orElseGet`?

假设我不知道一个Optional是空的,还是两个都存在.在后一种情况下,我总是想喜欢ab:

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检查,如果任一ab存在.此外,此代码按预期工作,输出为10.如果我把b = Optional.of("2")输出仍然10是因为我更喜欢a.如果我然后放a = Optional.empty(),输出是2预期的.

我做错了什么,或者是Idea的错误?

java optional java-8

5
推荐指数
1
解决办法
941
查看次数

如果我之前只过滤present()值,为什么findFirst()会抛出NullPointerException?

我有一个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)

java optional java-8 java-stream

3
推荐指数
1
解决办法
4778
查看次数

如何在groovy中将数组转换为int?

假设我在Groovy中定义了一个像这样的数组

def int[] a = [1,9]
Run Code Online (Sandbox Code Playgroud)

现在我想将这个数组转换成一个int变量,比如说a1a1的值是19(它是数组中的值a)以任何方式执行此操作?

groovy

2
推荐指数
1
解决办法
5424
查看次数

与 WhatsApp 共享包含 2000 至 3000 个印地语字符的文本

我正在尝试分享一篇长度超过 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)

android

2
推荐指数
1
解决办法
1618
查看次数

标签 统计

java ×3

android ×2

java-8 ×2

optional ×2

generics ×1

groovy ×1

java-stream ×1

parcelable ×1