简体   繁体   English

返回 Optional object 的通用类型转换方法

[英]Generic type-casting method returning an Optional object

I have a method:我有一个方法:

public LoadService {
    public <T> T load(String blobId, Class<T> objectClass) {
        // do stuff here
    }
}

That allows me to invoke it like so:这让我可以像这样调用它:

Fizz fizz = loadService.load("12345", Fizz.class);
Buzz buzz = loadService.load("23456", Buzz.class);

And this is great.这很棒。 Except , now, I want load(...) to return an Optional<???> so that the interaction would look something like:除了,现在,我希望load(...)返回Optional<???>以便交互看起来像:

Optional<Fizz> maybeFizz = loadService.load("12345", Fizz.class);
if (maybeFizz.isPresent()) {
   // etc.
}

Optional<Buzz> maybeBuzz = loadService.load("23456", Buzz.class);
if (maybeBuzz.isPresent()) {
   // etc.
}

What changes I need to make to load(...) method to make it capable of returning an Optional of <T> ?我需要对load(...)方法进行哪些更改才能使其能够返回<T>Optional

You can do it by declaring something like this.你可以通过声明这样的东西来做到这一点。

public static <T> Optional<T> load(Object something, Class<T> clazz){
  return Optional.of((T)something);
}

You can type-cast the given object inside the load() method either like that:您可以像这样在load()方法中对给定的 object 进行类型转换:

T result = (T) myObject;

or by making use of the of cast() method of the Class<T> class:或者通过使用Class<T> class 的cast()方法:

T result = objectClass.cast(myObject);

The only difference that in the first case, the compiler will issue a warning for unchecked type-cast.唯一的区别是在第一种情况下,编译器会针对未经检查的类型转换发出警告。

In order to create an optional object from the nullable value, you have to use the static method Optional.ofNullable() which will create an empty optional if the given value is null .为了从可空值创建可选的 object ,您必须使用 static 方法Optional.ofNullable()如果给定值为null ,它将创建一个空的可选。 Conversely, method Optional.of() with throw a NullPointerException if you pass a null reference to it.相反,如果您将null引用传递给它,方法Optional.of()会抛出NullPointerException

So the return clause of your method might be written like this:所以你的方法的 return 子句可以这样写:

return Optional.ofNullable(objectClass.cast(myObject));

or或者

return Optional.ofNullable((T) myObject);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM