强制转换是件坏事吗?Java泛型

强制转换是件坏事吗?Java泛型,java,generics,casting,Java,Generics,Casting,我有此代码,我想知道这是否被视为不良做法: Class<T> type = null; if (type.isInstance(TypeA.class)) { for (Object obj : typeAList) { TypeA mytype = (TypeA) obj; System.out.println(mytype.getMyId()); } } 类类型=null; if(类型isInstance(类型A.clas

我有此代码,我想知道这是否被视为不良做法:

Class<T> type = null;
if (type.isInstance(TypeA.class)) {
    for (Object obj : typeAList) {
        TypeA mytype = (TypeA) obj;
        System.out.println(mytype.getMyId());
    }
}    
类类型=null;
if(类型isInstance(类型A.class)){
用于(对象对象对象:类型列表){
TypeA mytype=(TypeA)obj;
System.out.println(mytype.getMyId());
}
}    
TypeList实际上是一个参数
列表TypeList


这里有坏分数吗?这能做得更好吗?

如果
typelist
List
那么为什么不这样迭代:

for(T obj : typeAList) {
    System.out.println(obj.getMyId());
}
如果定义了
T
以扩展已定义了
getMyId()
方法的某些已知类/接口。否则:

for(T obj : typeAList) {
    if (obj instanceof TypeA) {
        System.out.println(((TypeA)obj).getMyId());
    }
}

如果
typelist
List
,那么为什么不这样迭代:

for(T obj : typeAList) {
    System.out.println(obj.getMyId());
}
如果定义了
T
以扩展已定义了
getMyId()
方法的某些已知类/接口。否则:

for(T obj : typeAList) {
    if (obj instanceof TypeA) {
        System.out.println(((TypeA)obj).getMyId());
    }
}

这个问题有什么问题?它产生NPE是错误的?第二行是NullPointerException。它不是一个具体的类或绑定在某个地方吗?不确定你的意思。这是一个自定义类。这个问题怎么了?它产生NPE是错误的?第二行是NullPointerException。这不是一个具体的类或绑定在某个地方吗?不确定你的意思。是的,第二个适用于我的情况。我的问题是,这被认为是一种糟糕的编程/实践吗?实际上,java创建了一个对象集合,并在运行时使用反射来确定其类型……过度使用instanceof或isInstance通常是一种糟糕的实践。这意味着您可能缺少某个公共接口。如果你想要有一个拥有相似方法但功能不同的对象集合,那么我会使用上面建议的第一个选项。这是泛型的真正用法。在第二个选项中,您要求JVM在每次迭代中确定类的类型。这会让事情慢下来。是的,第二个适用于我的情况。我的问题是,这被认为是一种糟糕的编程/实践吗?实际上,java创建了一个对象集合,并在运行时使用反射来确定其类型……过度使用instanceof或isInstance通常是一种糟糕的实践。这意味着您可能缺少某个公共接口。如果你想要有一个拥有相似方法但功能不同的对象集合,那么我会使用上面建议的第一个选项。这是泛型的真正用法。在第二个选项中,您要求JVM在每次迭代中确定类的类型。这会减慢速度。