ryb*_*bit 24 java inheritance typing rtti
整个泛型的东西有点像扔我一个循环,更多的RTT.
Specificis?啊,这里的要点是:
enum QueryHelper {
query1,
query2;
static <T> QueryHelper getQueryHelper (Class<T> expectedReturn) {
if (expectedReturn.isInstance (SomeRelatedClass.class))
return query1;
else
return query2;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我会这样称呼它:
...
QueryHelper helper = QueryHelper.getQueryHelper(SomeRelatedClass.class);
...
Run Code Online (Sandbox Code Playgroud)
这样我就可以在实际帮助器中灵活地分配查询返回类型.它做了一些铸造和对象创建.我所看到的是,没有比赛,我应该以其他方式这样做吗?或者整个想法是不是很糟糕?
而真正的核心是我不理解class.isInstance和instanceOf运算符之间的区别?我应该使用后者吗?
Dón*_*nal 29
这样我就可以在实际帮助器中灵活地分配查询返回类型.
这种方法的返回类型没有任何灵活性
static <T> QueryHelper getQueryHelper (Class<T> expectedReturn) {
if (expectedReturn.isInstance (SomeRelatedClass.class))
return query1;
else
return query2;
}
Run Code Online (Sandbox Code Playgroud)
它将始终返回一个实例QueryHelper.如果您希望返回类型具有灵活性,则需要将其定义为:
static <T> T getQueryHelper (Class<T> expectedReturn) {
}
Run Code Online (Sandbox Code Playgroud)
现在返回类型是灵活的,因为它将取决于参数的类型
而真正的核心是我不理解class.isInstance和instanceOf运算符之间的区别?
不同之处在于instanceof执行在编译时修复的类型检查,例如:
static boolean isInstance(Object myVar) {
return (myVar instanceof Foo);
}
Run Code Online (Sandbox Code Playgroud)
将始终检查myVar是否为Foo的实例,而
static <T> boolean isInstance(Object myVar, Class<T> expectedType) {
return expectedType.isInstance(myVar);
}
Run Code Online (Sandbox Code Playgroud)
将检查myVar是expectedType的实例,但每次调用该方法时,expectedType都可以是不同的类型