import java.util.HashMap;
import java.util.Map;
public class StackOverFlowQuestion {
private static final int ERROR_CODE100 = -100;
private static final int ERROR_CODE101 = -101;
private static final int ERROR_CODE102 = -102;
private static final int ERROR_CODE103 = -103;
private static final int ERROR_CODE104 = -104;
public enum ErrorDetails {
ERROR_CODE_100(ERROR_CODE100, "Error code 100 Desc", false),
ERROR_CODE_101(ERROR_CODE101, "Error code 101 Desc", false),
ERROR_CODE_102(ERROR_CODE102, "Error code 102 Desc", true),
ERROR_CODE_103(ERROR_CODE103, "Error code 103 Desc", false),
ERROR_CODE_104(ERROR_CODE104, "Error code 104 Desc", true);
private int errorCode;
private String errorMsg;
private boolean canRetry;
private ErrorDetails(int errorCode, String errorMsg, boolean canRetry) {
this.errorCode = errorCode;
this.errorMsg = errorMsg;
this.canRetry = canRetry;
}
public String getErrorMsg() {
return this.errorMsg;
}
public boolean canRetry() {
return this.canRetry;
}
public String toString() {
return "Error code : " + errorCode + ", errorMsg : " + errorMsg
+ ", canRetry : " + canRetry;
}
}
private Map<Integer, ErrorDetails> errorMap;
public StackOverFlowQuestion() {
System.out.println("StackOverFlowQuestion.StackOverFlowQuestion()");
errorMap = new HashMap<Integer, StackOverFlowQuestion.ErrorDetails>();
errorMap.put(ERROR_CODE100, ErrorDetails.ERROR_CODE_100);
errorMap.put(ERROR_CODE101, ErrorDetails.ERROR_CODE_101);
errorMap.put(ERROR_CODE102, ErrorDetails.ERROR_CODE_102);
errorMap.put(ERROR_CODE103, ErrorDetails.ERROR_CODE_103);
errorMap.put(ERROR_CODE104, ErrorDetails.ERROR_CODE_104);
System.out.println("errorMap : " + errorMap);
}
/**
* @param args
*/
public static void main(String[] args) {
long param = -100;
StackOverFlowQuestion question = new StackOverFlowQuestion();
System.out.println("question.errorMap : " + question.errorMap);
System.out.println("question.errorMap.containskey(param) : "
+ question.errorMap.containsKey(param));
ErrorDetails errorDetails = question.errorMap.get(param);
System.out.println("errorDetails : " + errorDetails);
System.out.println("question.errorMap.containskey((int)param) : "
+ question.errorMap.containsKey((int) param));
ErrorDetails errorDetailsWithInt = question.errorMap.get((int) param);
System.out.println("errorDetailsWithInt : " + errorDetailsWithInt);
int paramInt = -100;
System.out.println("param == paramInt : " + (param == paramInt));
}
}
==============================================================================================================================输出:
StackOverFlowQuestion.StackOverFlowQuestion()
errorMap : {-100=Error code : -100, errorMsg : Error code 100 Desc, canRetry : false, -102=Error code : -102, errorMsg : Error code 102 Desc, canRetry : true, -101=Error code : -101, errorMsg : Error code 101 Desc, canRetry : false, -104=Error code : -104, errorMsg : Error code 104 Desc, canRetry : true, -103=Error code : -103, errorMsg : Error code 103 Desc, canRetry : false}
question.errorMap : {-100=Error code : -100, errorMsg : Error code 100 Desc, canRetry : false, -102=Error code : -102, errorMsg : Error code 102 Desc, canRetry : true, -101=Error code : -101, errorMsg : Error code 101 Desc, canRetry : false, -104=Error code : -104, errorMsg : Error code 104 Desc, canRetry : true, -103=Error code : -103, errorMsg : Error code 103 Desc, canRetry : false}
question.errorMap.containskey(param) : false
errorDetails : null
question.errorMap.containskey((int)param) : true
errorDetailsWithInt : Error code : -100, errorMsg : Error code 100 Desc, canRetry : false
param == paramInt : true
=================================================================================
这里有几个问题我需要澄清
我怀疑HashMap中的下面一行。get()方法if(e.hash==hash
我不确定int==long是否会失败,或者它们对应的包装器会失败。,我甚至在main方法中添加了一个检查来验证int和long变量的相等性。
我想了解这里的行为。
您需要将long转换为int。
1.)即使我将long作为参数传递给HashMap的get方法,代码仍在编译中,该方法被声明为只有整数作为键。我希望这里会出现编译错误,因为我觉得这违反了严格的类型。
这里没有编译错误:Map的唯一方法是put
方法,其参数由泛型类型限定get
和containsKey
接受对象
。
2.)当我将包含错误代码的长变量作为参数传递给HashMap()的get方法时,map返回null。
调用get(param)
时,它将被转换为get(new Long(param))
。因此参数永远不等于整数
键
3.)当我将相同的long参数向下转换为int并将其传递给哈希映射的get方法时,映射返回正确的枚举。
调用get((int)param)
时,它将被转换为get(newinteger((int)param))
。因此,参数类型现在是正确的,结果就是您所期望的结果。
即使我将long作为参数传递给HashMap的get方法,该方法被声明为只有Integer作为键,代码仍在编译。我希望这里会出现编译错误,因为我觉得这违反了严格的类型。
你看Map.get
的签名了吗?
V get(Object key)
任何对象都可以作为关键。关于这个设计决策还有其他堆栈溢出问题;我稍后会找到一个。
当我将包含错误代码的长变量作为参数传递给HashMap()的get方法时,map返回null。
是的,它会-因为它将被装箱为Long
,而Long
不等于整数。因此在地图中找不到该条目。
当我将同一个long参数向下转换为int并将其传递给哈希映射的get方法时,映射返回正确的枚举。
是的,它会-因为它将被装箱到
整数
,这将等于适当的键。
基本上,你被这样一个事实愚弄了,你可以比较
int
和long
值——这只是编译器自动为你将int
提升为long
;如果你想到整数
和Long
作为完全独立的类型,它们之间没有自动转换,映射的行为非常有意义。
问题内容: 我有3个文件main.php,action.js和ajax.php,我在javascript文件中通过ajax调用成功地将某些div单击的内容从main.php更改为ajax.php的内容。看起来像这样: 现在,我需要从action.js中的ajax.php中的函数返回值,因为我想迭代直到该值(请参见上面的代码)。如何将此值从ajax.php传递到action.js。我很困惑我需要什么
问题内容: 我被困在这个我无法完成的非常基本的表单中,我想用文本输入和两个选择控件构建一个搜索表单,并带有一个接受3个参数的路由,这个问题是当我提交形式,它用问号而不是Laravel方式映射参数, 标记 路线 当我提交表格时,将我重定向到 在没有Javascript的情况下,如何使用Laravel方式将这些参数传递给我的路线!:D 问题答案: 最简单的方法就是接受传入的请求,然后在Controll
问题内容: 如何在Java中将值转换为值? 问题答案: 或如果您不必担心null: 在这两种情况下,您都可能会遇到溢出问题(因为Long可以比Integer存储更大的范围)。 Java 8有一个辅助方法来检查溢出(在这种情况下,您会得到一个异常):
我有静态方法在我的类 这就是定义 这里用的是 这是我得到的一个错误 E0167类型为“void(TV_DepthCamAgent::)(int count,int copied_file)”的参数与类型为“void()(int,int)”的参数不兼容 错误C3867“TV_DepthCamAgent::progress_callback”:非标准语法;使用' 我做错了什么?
问题内容: 我想阅读onClick事件值属性。但是当我单击它时,在控制台上会看到类似以下的内容: 我的代码正常工作。运行时,我可以在onClick事件中看到但无法获取它。 我的代码: 如何在React js中将值传递给事件? 问题答案: 简单的方法 使用箭头功能: 这将创建一个新的函数,以正确的参数进行调用。 更好的方法 将其提取到子组件中。在render调用中使用箭头函数的问题是,每次都会创建一
在get方法中尝试在springboot中按id查找行时,收到一个空值。我在这里对数据库的调用是否有误? 存储库- 服务- 控制器-