这可能是一个非常愚蠢的问题,甚至是不可能的。
我不确定这是否会被称为方法,但是这样做。我怎样才能传递getCountryName();作为参数?如下图所示;
public static String Utils(Something something){
Geocoder geoCoder = new Geocoder(context, Locale.getDefault());
List<Address> address = null;
if (geoCoder != null) {
try {
address = geoCoder.getFromLocation(lat, lng, 1);
} catch (IOException e1) {
e1.printStackTrace();
}
if (address.size() > 0) {
return address.get(0).getCountryName(); // pass this as parameter (something)
}
}
return null;
}
然后像这样调用它,
Utils(getCountryName());
Utils(getCountryCode());
etc.
答案 0 :(得分:2)
This Answer帮助我做到了。您也可以尝试。
方法不是Java中的一流对象,因此它们不能作为参数传递。您可以将您的方法调用包装在扩展例如
Runnable
界面。
答案 1 :(得分:1)
您可以使用反射。
e.g。
Method[] methods = Address.class.getMethods();
for (Method method : methods){
if(method.getName().equals(param)){
return (String) method.invoke(address.get(0));
}
}
param
的类型为String
,其值为您要调用的方法。
编辑:完整示例,使用getMethod(String)
public static String Utils(String param){
Geocoder geoCoder = new Geocoder(context, Locale.getDefault());
List<Address> address = null;
if (geoCoder != null) {
try {
address = geoCoder.getFromLocation(lat, lng, 1);
} catch (IOException e1) {
e1.printStackTrace();
}
if (address.size() > 0) {
Method method = Address.class.getMethod(param);
if(method == null) return null;
try{
return (String) method.invoke(address.get(0));
}catch(ReflectiveOperationException e){
// Expected param maybe?
return null;
}
}
}
return null;
}
答案 2 :(得分:0)
在java中,这是您最终使用的语言。您不能将方法或函数作为参数传递给函数。如果您能够使用它,那么从Java 8开始,lambda表达式就是一种“匿名”函数。试试吧。
http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
在这个SO答案中,你有一个非常详细的指南。 Java Pass Method as Parameter
在该线程中,如果您不能使用java8
,则会有更多关于某些模式的信息答案 3 :(得分:0)
试试这个;
首先使用您要作为参数传递的方法定义一个接口
public interface Callable {
public void getCountryName();
public void getCountryCode();
}
使用方法
实现一个类class Method_passing implements Callable {
public void getCountryName() {
//do your task
}
public void getCountryCode() {
//do your task
}
}
像这样调用
Callable cmd = new Method_passing();
//This allows you to pass cmd as parameter and invoke the method call defined in the interface
public invoke( Callable callable ) {
cmd.getCountryName(); //return name etc..
cmd.getCountryCode();
}
答案 4 :(得分:0)
您可以在地址类中实现getUtil函数,然后使用标识符来执行您选择的函数。
public class Address {
public static final int GET_COUNTRY_NAME = 1;
public static final int GET_COUNTRY_CODE = 2;
public String getUtil(int code){
switch(code){
case GET_COUNTRY_NAME: return this.getCountryName();
case GET_COUNTRY_CODE: return this.getCountryCode();
default: return null;
}
}
private String getCountryName(){
//do something
return "";
}
private String getCountryCode(){
//do something
return "";
}}
然后定义你的函数,如
public static String Utils(int something){
Geocoder geoCoder = new Geocoder(context, Locale.getDefault());
List<Address> address = null;
if (geoCoder != null) {
try {
address = geoCoder.getFromLocation(lat, lng, 1);
} catch (IOException e1) {
e1.printStackTrace();
}
if (address.size() > 0) {
return address.get(0).getUtil(something);
}
}
return null; }}
将使用
调用Utils(Address.GET_COUNTRY_NAME);
Utils(Address.GET_COUNTRY_CODE);