[英]How to correctly use constructors?
嗨,我是Java的新手,构造函数仍然困扰我。 我正在尝试创建和枚举如下:
public enum SCardErrors
{
SCARD_S_SUCCESS(0x0L),
SCARD_E_SHARING_VIOLATION(0x8010000BL),
SCARD_E_NO_READERS_AVAILABLE(0x8010002EL),
SCARD_E_READER_UNAVAILABLE(0x80100017L);
private int intValue;
private static java.util.HashMap<Integer, SCardErrors> mappings;
private static java.util.HashMap<Integer, SCardErrors> getMappings()
{
if (mappings == null)
{
synchronized (SCardErrors.class)
{
if (mappings == null)
{
mappings = new java.util.HashMap<Integer, SCardErrors>();
}
}
}
return mappings;
}
private SCardErrors(int value)
{
intValue = value;
getMappings().put(value, this);
}
public int getValue()
{
return intValue;
}
public static SCardErrors forValue(int value)
{
return getMappings().get(value);
}
}
从上面给出的错误是未为以下行定义构造函数SCardErrors(long):SCARD_S_SUCCESS(0x0L),SCARD_E_SHARING_VIOLATION(0x8010000BL),SCARD_E_NO_READERS_AVAILABLE(0x8010002EL),SCARD_E_READER_UNAVAILLABLE(0x80100017)
我尝试为它们中的每个添加SCARD_S_SUCCESS(0x0L){},但是它没有解决错误。 我也尝试将它们添加为参数,但这没有用。 有人可以帮忙吗?
您只有一个接受int
的构造函数:
private SCardErrors(int value)
...但是您尝试使用long
类型的参数来调用它:
SCARD_S_SUCCESS(0x0L)
您要么需要更改构造函数以接受long
(可能还更改了字段类型),要么将参数更改为int
值。 并非所有的参数都可以表示为int
(例如0x80100017L)-但是,如果您只关心所涉及的位,并且不介意值变为负数,则可以将其强制转换为int
并仍然具有相同的32位...
Java找不到构造函数的原因是,您在所有数字文字上使用了L
后缀,使它们变long
,而不是int
。 Java不允许在没有显式强制转换的情况下将long
转换为int
,因此编译器无法在这种情况下应用采用int
的构造函数(反之亦然,即将int
传递给期望long
的方法或构造函数,工作)。
您可以通过将编译器更改为long
并使用longValue
代替intValue
来解决此问题:
private long longValue;
private static java.util.HashMap<Long, SCardErrors> mappings;
private static java.util.HashMap<Long, SCardErrors> getMappings()
{
if (mappings == null)
{
synchronized (SCardErrors.class)
{
if (mappings == null)
{
mappings = new java.util.HashMap<Long, SCardErrors>();
}
}
}
return mappings;
}
private SCardErrors(long value)
{
longValue = value;
getMappings().put(value, this);
}
public long getValue()
{
return longValue;
}
public static SCardErrors forValue(long value)
{
return getMappings().get(value);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.