小编Eri*_*son的帖子

如何检查泛型类型是否在java中实现了特定类型的泛型接口?

可能重复:
运行时局部变量的通用类型

我是Java泛型的新手,来自.NET世界,我习惯于能够编写这样的方法:

public void genericMethod<T>(T genericObject)
{
    if (genericObject is IList<String>)
    {
        //Do something...
    }            
}
Run Code Online (Sandbox Code Playgroud)

该方法接受泛型类型的对象,并检查该对象是否实现了通用接口的特定版本IList<>,在本例中IList<String>.

现在,在Java中,我能够做到这一点:

public <T> void genericMethod(T genericObject)
{
    if (genericObject instanceof Set<?>)
    {
       //Do something...
    }
}
Run Code Online (Sandbox Code Playgroud)

Java并没有让我做if (genericObject instanceof Set<String>)

据我所知,由于类型擦除,通常在Java中,这将由类对象处理,我们将执行以下操作:

public <T> void genericMethod(T genericObject)
{
    Class<OurTestingType> testClass = OurTestingType.class;
    if (genericObject.getClass() == testClass)
    {
       //Do something...
    }
}
Run Code Online (Sandbox Code Playgroud)

但由于我正在检查的类型是通用接口,你不能这样做:

Class<Set<String>> testClass = Set<String>.class

那么,在Java中,我如何检查通用对象是否实现了特定类型Set<String>

java generics collections

22
推荐指数
2
解决办法
6万
查看次数

'6/1/2012'<'6/1/2012 0:00:00.000'=真?

当我在SQL-Server 2008中运行此代码时,

select case when '6/1/2012' < '6/1/2012' then 1 else 0 end
Run Code Online (Sandbox Code Playgroud)

我得到0.

如果我跑,

select case when '6/1/2012 0:00:00.000' < '6/1/2012' then 1 else 0 end
Run Code Online (Sandbox Code Playgroud)

我也得到0.

但是,如果我跑

select case when '6/1/2012' < '6/1/2012 0:00:00.000' then 1 else 0 end
Run Code Online (Sandbox Code Playgroud)

我得到1.

为什么是这样?

sql sql-server

3
推荐指数
2
解决办法
116
查看次数

标签 统计

collections ×1

generics ×1

java ×1

sql ×1

sql-server ×1