5 回答

TA贡献1818条经验 获得超3个赞
有多种方法可以从方法中重新调整多个值,我使用的一些最佳方法是:
1-为要返回的数据类型创建类,例如,您要返回两个字符串,使类如下所示:
public class myType {
String a;
String b;
public String getA() {
return a;
}
public void setA(String _a) {
a = _a;
}
//And All other geter setters
}
并将您的方法的返回类型设置为上述类。
2- 使用键值对返回 Map
3- 制作接口并从要返回值的位置调用抽象方法(您必须在要接收值的类中实现接口)希望这会给您一个粗略的想法前进

TA贡献1864条经验 获得超6个赞
您可以按如下方式创建自定义 java 对象
public class Result {
private boolean success;
private int totalResults;
public Result(boolean success, int totalResults){
this.success = success;
this.totalResults = totalResults;
}
public boolean getSuccess(){
return this.success;
}
public boolean getTotalResults(){
return this.totalResults;
}
}

TA贡献1833条经验 获得超4个赞
我想any[1]用来模拟指针。像 C++*p和 C# out。
boolean[] p_status = new boolean[1];
int count = retrieveData(p_status);
boolean status = p_status[0];
其他样品,能量:
public static void main(String[] args) throws JsonProcessingException {
// I try to analysis the string, but don't want to create a new class
var strs = "1,2,ABC,3,4,6,7,1,6,9,XYZ,3,6,3,7,9,2,5,9,ABC";
// use any[1] as pointer
int[] p_iStrCount = new int[1];
// when facing eneric, it's a little different
@SuppressWarnings("unchecked") HashMap<Integer, Integer>[] p_hmNum = new HashMap[1];
// use pointer as parameters, so I can get multiple results out
var hmStr = analysis(strs, p_iStrCount, p_hmNum);
var iStrCount = p_iStrCount[0];
var hmNum = p_hmNum[0];
}
// `strs` as input
// `pOut_iStrCount`, `pOut_hmNum`, `return` as output
// You can ignore the details of this method
static HashMap<String, Integer> analysis(@NotNull String strs, @Nullable int[] pOut_iStrCount, @Nullable HashMap<Integer, Integer>[] pOut_hmNum){
var aryStr = StringUtils.split(strs, ",");
var iStrCount = null != aryStr ? aryStr.length : 0;
var hmStr = new HashMap<String, Integer>();
var hmNum = new HashMap<Integer, Integer>();
if(null != aryStr){
for(String str : aryStr){
hmStr.compute(str, (k,v)->(null == v ? 0 : v + 1));
int num;
try{
num = Integer.parseInt(str);
}catch (NumberFormatException ignore){
continue;
}
hmNum.compute(num, (k,v)->(null == v ? 0 : v + 1));
}
}
if(null != pOut_iStrCount){ pOut_iStrCount[1] = iStrCount; }
if(null != pOut_hmNum){ pOut_hmNum[1] = hmNum; }
return hmStr;
}

TA贡献1808条经验 获得超4个赞
我建议坚持您当前的一般方法,而不是尝试从您的方法中返回两条信息。您的方法签名会引发异常,处理此问题的一种可能方法是让您的方法在出现问题时引发异常。否则,这意味着计数查询确实运行了,并且会返回一些计数。但是,您可能应该在 JDBC 代码周围有一个 try catch 块:
public static int retrieveData(Connection conn) throws Exception {
Statement stmt = null;
int totalCount = 0;
try {
String query = "SELECT COUNT(*) FROM Account";
ResultSet rsRetrieve;
stmt = conn.createStatement();
rsRetrieve = stmt.executeQuery(query);
if (rsRetrieve.next()) {
totalCount = rsRetrieve.getInt(1);
System.out.println("totalCount : " + totalCount);
}
}
catch (SQLException e) {
System.out.println(e.getMessage());
threw new Exception("something went wrong");
}
finally {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
return totalCount;
}
所以这里使用的模式是,如果出现问题,则没有计数,调用者会收到异常。否则,如果没有发生异常,则返回一些计数。

TA贡献1851条经验 获得超4个赞
你不能,但你可以创建一个 bean 类来保存多个对象。
如果这是用于程序错误处理,您可能需要查看 Optional (standard) 或 Either (vavr) 来处理多个结果
添加回答
举报