Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Variables_Packages - Fatal编程技术网

是否引用包含变量的包?JAVA

是否引用包含变量的包?JAVA,java,variables,packages,Java,Variables,Packages,我可以用变量名引用java中的特定包吗 假设我想访问嵌套结构中的方法foo(),位于stuff.bitchie.jelly.sausages.foo(),(其中jelly是一个包,sausages是一个类) 我是否可以设置变量var,以便var=stuff.bitchie.jelly.sausages,然后通过以下方式访问foo(): var.foo()?(或有点类似) 编辑: 关于导入,如果我想使用许多不同的foo()方法,有什么建议吗,例如: stuff.biscuit.jelly.cher

我可以用变量名引用java中的特定包吗

假设我想访问嵌套结构中的方法
foo()
,位于
stuff.bitchie.jelly.sausages.foo()
,(其中
jelly
是一个包,
sausages
是一个类)

我是否可以设置变量
var
,以便
var=stuff.bitchie.jelly.sausages
,然后通过以下方式访问
foo()

var.foo()
?(或有点类似)

编辑:

关于导入,如果我想使用许多不同的foo()方法,有什么建议吗,例如:

stuff.biscuit.jelly.cherry.foo()
stuff.biscuit.jelly.apple.foo()
stuff.biscuit.jelly.strawberry.foo()
?


编辑:建议的副本不相关。它指的是对变量使用与包相同的名称。我指的是带有变量的嵌套包。

不,你不能这样做。您所能做的最好的事情是将您的方法定义为静态的,并对相应的类进行静态导入。然后您可以直接调用该方法

差不多

import static stuff.biscuit.jelly.Sausages.*; 
然后在代码中使用

foo();

您可以使用反射获取对方法的引用,并使用invoke(…)调用该方法。假定“香肠”是香肠类的一个实例:

Class cl = sausages.getClass();
Method myMethod = cl.getMethod("myMethod"); 
myMethod.invoke(params);

尽管一切都说了又做了,为什么不直接导入包/类并以这种方式调用方法呢

没有。你不能!您可以通过输入包中的所有类来减少工作量,方法是说
import-package.*
;抱歉,我不确定“香肠”是否应该是一个类,或者您是否询问是否可以调用包上的方法……无论哪种方式。如果是类,他可以使用反射来获取类对象,调用newInstance(),然后甚至使用反射来调用该方法。或者转换到某个接口来调用foo()。@Prashant No,这个问题与其他问题有关。由于不同包中不同类中有多个foo(),因此,请在类/实例级别导入类并调用方法,而不是进行静态导入。反思可能会回答最初的问题,但不是一种推荐的方式来完成你似乎想要完成的事情。那时你正处于困境之中。除非使用反射技术,否则必须使用完全限定的包名来调用该方法。但除非绝对必要,否则不应使用反射。