Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编译使用Class.isAssignableFrom()的代码,包括和不包括泛型识别编译器_Java_Generics_Suppress Warnings - Fatal编程技术网

Java 编译使用Class.isAssignableFrom()的代码,包括和不包括泛型识别编译器

Java 编译使用Class.isAssignableFrom()的代码,包括和不包括泛型识别编译器,java,generics,suppress-warnings,Java,Generics,Suppress Warnings,我有一些Java代码需要使用当前的泛型编译器以及不了解泛型的旧的或外来的编译器进行编译。除了使用Class.isAssignableFrom()的少数情况外,我几乎成功地编译了所有代码,并且没有任何警告 此示例使用任一编译器进行编译,但支持泛型的编译器会发出如下警告: “类型安全:方法isAssignableFrom(类)属于原始类型类。对泛型类型类的引用应参数化” 这消除了警告,但没有泛型当然无法编译: public static boolean isType( Class<?>

我有一些Java代码需要使用当前的泛型编译器以及不了解泛型的旧的或外来的编译器进行编译。除了使用Class.isAssignableFrom()的少数情况外,我几乎成功地编译了所有代码,并且没有任何警告

此示例使用任一编译器进行编译,但支持泛型的编译器会发出如下警告:

“类型安全:方法isAssignableFrom(类)属于原始类型类。对泛型类型类的引用应参数化”

这消除了警告,但没有泛型当然无法编译:

public static boolean isType( Class<?> type, Class clazz )
{
    return type.isAssignableFrom( clazz );
}
publicstaticbooleanistype(类类型,类clazz)
{
返回类型.isAssignableFrom(clazz);
}
我通过使用
MyClass.Class.isInstance()
替换它来修复一些情况,而其他一些情况则使用
MyClass.Class.isAssignableFrom(clazz)
来修复,它在任何地方都可以编译,但还有一些情况下我确实需要在任意类对象上调用
Class.isAssignableFrom()
@SuppressWarnings也不可能使用,因为它也只能被了解Java 1.5扩展和更新版本的编译器理解


那么,有没有办法解决这个问题,或者我必须接受警告呢?

接受警告,或者使用条件编译(取决于您使用的构建工具)。。。尽管我认为尝试支持两个不兼容的Java版本不是一个好的实践。它们可能比编译警告更糟糕。

事实上,生命的终结已经过去了。对1.4的支持于2008年结束,对5的支持于2009年结束。如果出于无法控制的原因,您不得不继续开发这些版本,我深表同情。否则,我建议升级到Java 6。我确实尽可能使用当前的编译器,但仍有一些VM,即针对需要旧文件类格式或希望从源代码编译而不了解泛型的嵌入式平台。我最终放弃了这种方法。我现在以Java5+风格编译所有内容,然后对字节码进行后处理,使其再次与1.4VM兼容。这工作得非常好,并且比尝试编写使用泛型和不使用泛型编译的代码要方便得多。
public static boolean isType( Class<?> type, Class clazz )
{
    return type.isAssignableFrom( clazz );
}