Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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 搜索特定类并返回它_Java_Class_Casting - Fatal编程技术网

Java 搜索特定类并返回它

Java 搜索特定类并返回它,java,class,casting,Java,Class,Casting,我有一个函数返回(在我的例子中)一个块。 我有一个名为blockName的字符串,其值将设置为“dirt”。 之后,我将创建一个名为blocknamecoverted的新字符串。这将是BlockDirt,我还有一个类BlockDirt(它不在同一个包中): 还有: Exception in thread "main" java.lang.ClassCastException: Cannot cast java.lang.Class to block.Block at java.lang.

我有一个函数返回(在我的例子中)一个
。 我有一个名为
blockName
的字符串,其值将设置为“dirt”。 之后,我将创建一个名为
blocknamecoverted
的新字符串。这将是
BlockDirt
,我还有一个类
BlockDirt
(它不在同一个包中):

还有:

Exception in thread "main" java.lang.ClassCastException: Cannot cast java.lang.Class to block.Block
    at java.lang.Class.cast(Unknown Source)
    at registry.MinecraftRegistry.getBlockFromId(MinecraftRegistry.java:44)
    at registry.BlockRegistry.register(BlockRegistry.java:11)
    at block.Block.registerBlock(Block.java:21)
    at engineTester.MainGameLoop.main(MainGameLoop.java:126)
我做错了什么

我没有发布我完整的类,因为我只是想知道如何搜索一个类并返回(或使用)它

Block blockClass=Block.class.cast(clas)我希望得到与
Block blockClass=new BlockDirt()相同的结果
但是我不能直接在我的代码中键入这个,因为以后我还想创建其他块,不想每次都得到
BlockDirt
的id

我希望你能理解我,因为英语不是我的母语

java.lang.ClassNotFoundException:BlockDirt

第一个异常告诉您类路径上不存在类
BlockDirt
。您还需要正确的包名。例如:

Class.forName("foo.bar.someprogram.BlockDirt");
在你的情况下,像这样的东西可能是你需要的

Class<? extends Block> myClass = Class.forName(myPackageName + blockNameConverted);

请记住,您需要包名才能使反射正常工作。如果您知道它可能在哪些包中,您可以使用

java.lang.ClassNotFoundException:BlockDirt

第一个异常告诉您类路径上不存在类
BlockDirt
。您还需要正确的包名。例如:

Class.forName("foo.bar.someprogram.BlockDirt");
在你的情况下,像这样的东西可能是你需要的

Class<? extends Block> myClass = Class.forName(myPackageName + blockNameConverted);


请记住,您需要包名才能使反射正常工作。如果您知道它可能在什么包中,您可以使用。

您正在将类本身强制转换为块。这不是一个街区。使用
clas.newInstance()
创建该类的新实例。第一个异常仅表示:类BlockDirt不在运行代码的JVM的类路径中。两个不同的错误,两个不同的问题:1)
ClassNotFoundException
:类路径错误,和/或未指定正确的类名,2)
ClassCastException
:您必须强制转换BLOCK的类实例,而不是“CLASS”对象“您可能应该使用
BlockDirt
及其全名:
com.test.BlockDirt
用于
CLASS.forName
类clazz=CLASS.forName(“com.test.BlockDirt”)
您正在将类本身强制转换为块。它不是块。请使用
clas.newInstance()创建类的新实例
。第一个异常仅仅意味着:类BlockDirt不在运行代码的JVM的类路径中。两个不同的错误,两个不同的问题:1)
ClassNotFoundException
:类路径错误,和/或未指定正确的类名;2)
ClassCastException
:必须强制转换类实例块的CE,而不是“类”对象“您可能应该将
BlockDirt
与其全名一起使用:
com.test.BlockDirt
用于
Class.forName
Class clazz=Class.forName(“com.test.BlockDirt”)谢谢!我忘了“-->PACKAGENAME。谢谢你!我忘了“-->PACKAGENAME。
Block block = myClass.getConstructor(String.class, int.class).newInstance("Foo", 42);