最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】Android(Java)中如何实现(类似于C#中的OUT)的输出类型参数(output parameter)

Android crifan 5346浏览 0评论

【问题】

Android中,即Java中,如何调用函数,传递一个OUT类型的参数,然后可以保存函数返回时的值的。

【解决过程】

1.即,用这样的代码:

    /** Extract single string from input whole string
     *	Note:
     * 1. input pattern should include one group, like 'xxx(xxx)xxx'
     * 2. output is in extractedStr
     *  */
    public Boolean extractSingleStr(String pattern, String extractFrom, String extractedStr)
    {    	
    	Pattern strP = Pattern.compile(pattern);
    	Matcher foundStr = strP.matcher(extractFrom);
    	Boolean found = foundStr.find();
    	if(found)
    	{
    		extractedStr = foundStr.group(1);
    	}    	
    	return found;
    }
    
    
    String extractedTitle = "";
    if(extractSingleStr("<p\\s+class=\"mid_tit\">(.+?)</p>", respHtml, extractedTitle))
    {
        etUrlOrId.setText(extractedTitle);
    }

是无法通过extractedTitle获得对应的值的。

2.试了试,把函数写出

取地址形式,加上&:

String &extractedStr

或者指针形式:

String *extractedStr

都是语法错误,不合法的。

3.参考:

Java实现OUT参数

想去试试,结果发现,除了定义String数组,貌似还真没有方便的实现方式的。

4.再去参考:

java可以通过输出参数把String对象传出来么

JAVA中的输出参数

都好像是用

StringBuilder

去试试:

    public Boolean extractSingleStr(String pattern, String extractFrom, StringBuilder extractedStr)
    {    	
    	Pattern strP = Pattern.compile(pattern);
    	Matcher foundStr = strP.matcher(extractFrom);
    	Boolean found = foundStr.find();
    	if(found)
    	{
    		extractedStr.append(foundStr.group(1));
    	}    	
    	return found;
    }
    
    	StringBuilder extractedTitle = new StringBuilder();

    	if(extractSingleStr("<p\\s+class=\"mid_tit\">(.+?)</p>", respHtml, extractedTitle))
    	{
    		etUrlOrId.setText(extractedTitle);
    	}

结果是可以的:

string builder shared true

5.另外这里解释的更加清楚的:

How to use an output parameter in Java?

 

【总结】

当Java中函数中,想要实现output parameter时,对应的参数,不能是Immutable,即不能是,不可更改的,

而String就是Immutable,所以要换用StringBuilder之类的,Mutable的类型的变量,去实现对应的output parameter。

转载请注明:在路上 » 【已解决】Android(Java)中如何实现(类似于C#中的OUT)的输出类型参数(output parameter)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

    86 queries in 0.163 seconds, using 22.10MB memory