[英]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.