返回 Optional 对象的通用类型转换方法
Generic type-casting method returning an Optional object
我有一个方法:
public LoadService {
public <T> T load(String blobId, Class<T> objectClass) {
// do stuff here
}
}
这让我可以像这样调用它:
Fizz fizz = loadService.load("12345", Fizz.class);
Buzz buzz = loadService.load("23456", Buzz.class);
这太棒了。 除了 ,现在,我希望 load(...)
到 return 和 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.
}
我需要对 load(...)
方法进行哪些更改才能使其能够 returning 一个 <T>
的 Optional
?
你可以通过声明这样的东西来做到这一点。
public static <T> Optional<T> load(Object something, Class<T> clazz){
return Optional.of((T)something);
}
您可以 type-cast load()
方法中的给定对象,就像这样:
T result = (T) myObject;
或者利用 Class<T>
class:
的 cast()
方法
T result = objectClass.cast(myObject);
唯一不同的是,在第一种情况下,编译器会对未经检查的情况发出警告type-cast。
为了从可为 null 的值创建一个可选对象,您必须使用静态方法 Optional.ofNullable()
,如果给定值为 null
,它将创建一个空的可选对象。相反,方法 Optional.of()
如果您将 null
引用传递给它,则抛出 NullPointerException
。
所以你方法的return子句可以这样写:
return Optional.ofNullable(objectClass.cast(myObject));
或
return Optional.ofNullable((T) myObject);
我有一个方法:
public LoadService {
public <T> T load(String blobId, Class<T> objectClass) {
// do stuff here
}
}
这让我可以像这样调用它:
Fizz fizz = loadService.load("12345", Fizz.class);
Buzz buzz = loadService.load("23456", Buzz.class);
这太棒了。 除了 ,现在,我希望 load(...)
到 return 和 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.
}
我需要对 load(...)
方法进行哪些更改才能使其能够 returning 一个 <T>
的 Optional
?
你可以通过声明这样的东西来做到这一点。
public static <T> Optional<T> load(Object something, Class<T> clazz){
return Optional.of((T)something);
}
您可以 type-cast load()
方法中的给定对象,就像这样:
T result = (T) myObject;
或者利用 Class<T>
class:
cast()
方法
T result = objectClass.cast(myObject);
唯一不同的是,在第一种情况下,编译器会对未经检查的情况发出警告type-cast。
为了从可为 null 的值创建一个可选对象,您必须使用静态方法 Optional.ofNullable()
,如果给定值为 null
,它将创建一个空的可选对象。相反,方法 Optional.of()
如果您将 null
引用传递给它,则抛出 NullPointerException
。
所以你方法的return子句可以这样写:
return Optional.ofNullable(objectClass.cast(myObject));
或
return Optional.ofNullable((T) myObject);