【问题标题】:Test if class's generic parameter is itself the same class with its own generic parameter测试类的泛型参数本身是否与具有自己的泛型参数的类相同
【发布时间】:2014-08-09 20:13:39
【问题描述】:

我不确定我对标题的表述是否正确,但希望我的伪代码几乎是不言自明的。我不知道如何测试 SomeType 对象是否是 MyClass 的实例(或后代)。这怎么可能实现?

public class MyClass<SomeType>
{
    //...
    public void a(SomeType st)
    {
        if (SomeType extendsOrIs MyClass<?>) // Need help with this line
        {
            MyClass<?> mc = (MyClass<?>) st;
            mc.b();
        }
    }
    public void b()
    {
        //...
    }
}

我发现的一个解决方案是这样做,但对象可能为 null,在这种情况下,我仍然想知道 SomeType 是否等同于 MyClass&lt;?&gt; 以便调用方法未来对象:

    public void a(SomeType st)
    {
        if (st instanceof MyClass<?>)
        {
            MyClass<?> mc = (MyClass<?>) st;
            mc.b();
        }
    }

【问题讨论】:

  • 但对象可能为空?你的意思
  • null 没有类 - 因此无法检查 null 值的类是什么,因为它没有类。

标签: java generics instanceof


【解决方案1】:

first of null 不是任何类的实例。可以在MyClass 中创建final 方法如:-

public class MyClass<SomeType>
{
    //...
    public void a(SomeType st)
    {
        if (SomeType extendsOrIs MyClass<?>) // Need help with this line
        {
            MyClass<?> mc = (MyClass<?>) st;
            mc.b();
        }
    }
   public final boolean isSubClass()
   {    
     if(this.getClass()!=MyClass.class){
     return true;
     }
    return false;
   }

public void a(SomeType st)
    {
        if (st instanceof MyClass<?>)
        {
            MyClass<?> mc = (MyClass<?>) st;
            mc.isSubClass();
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 2017-10-06
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多