我需要实现一个功能类似于以下方法的方法:
static <T extends Object> T validateObj (T obj) throws ValidationException {
// ValidationException is a custom Exception class
if (obj == null) {
throw new ValidationException(T.class.getSimpleName() + errorMsgTemplate);
} else {
return obj;
}
}
系统如何使用该功能的示例:
try {
RandomAccessFile file = getFile(pathName, "r"); // Custom method. May return null
file = Validator.validateObj(file);
} catch (Exception e) {
// Handle exception
}
// Use file
在尝试记录错误时,无论传递的实际对象是否为null
,如何为每个特定方法调用获取T的类名?要传递给验证方法的对象变量的类型始终为方法调用者所知。
更新:虽然我选择了Bambino的答案,但这里也是对StuPointerException的回答。由于处理现有代码的限制,他的答案更适合我的具体问题。但是,我确实相信Bambino的答案是更正确的实施解决方案。
答案 0 :(得分:1)
这是不可能的,我害怕; - name: Build docker image
become: yes
docker_image:
path: /tmp/foo
name: foo
state: present
- name: Tag docker image
become: yes
docker_image:
name: foo
repository: foo
tag: "{{ version.stdout }}"
state: present
返回对象的类。当你拥有getClass
时,你没有物品,所以你无法获得它的类型。
解决这个问题的一种方法是强制调用者包含对他们正在(或可能)传递的类的引用:
null
答案 1 :(得分:1)
请查看Objects.requireNonNull以了解您所需的功能。
答案 2 :(得分:0)
如果您有表格的通用方法
static <T> T validateObj(T obj) {
// code
}
然后T
的类型由您传入的对象的类确定。也就是说,T
将始终完全是您传入的类型。这意味着您可以调用{ {1}}获取课程,只要它不是空的。
如果您传递obj.getClass()
,则会将null
视为T
。