我有不同的例外类别枚举如下
public enum GSBBCacheCategory  {
    SEARCH(9001),
    UPDATE_PERSECURITY(9002),
    CROSS_REFERENCING_PERSECURITY(9003),
    METADATA_SEARCH(9004),
    REMOVEALL(9005),
    UPDATE_BACKOFFICE(9002);
    private int exceptionCode;
    GSBBCacheCategory(int exceptionCode)
    {
        this.exceptionCode = exceptionCode;
    }
    public int getExceptionCode()
    {
        return exceptionCode;
    }
} 
public enum GSBBEncryptionCategory  {
.
.
.
}
我想在客户端代码中提供一个访问这些枚举的位置.目前我实现了如下
public class GSBBExceptionCodes
{
 public static GSBBDecryptionCategory decryptionCategory;
 public static GSBBCacheCategory cacheCategory;
}
现在访问异常代码我已经做了类似下面的事情
public static void main(String[] args) {
     System.out.println(GSBBExceptionCodes.decryptionCategory.ERRORCODE_DECRYPTION_FAILURE);
     System.out.println(GSBBExceptionCodes.cacheCategory.UPDATE_PERSECURITY);
}
其中说" 应该以静态方式访问静态字段GSBBDecryptionCategory.ERRORCODE_DECRYPTION_FAILURE "
是否可以在没有任何警告的情况下实现上述目
有两种方法可以引用静态成员(字段或方法).一个是WhateverClass.theField,另一个是someInstance.theField其中someInstance具有一个编译时间类型WhateverClass.前者更清晰,因此您的IDE有助于告诉您使用它而不是后者.
更好的原因是,通过实例引用静态成员使得它看起来像该方法与该实例有关,而事实并非如此.这是一个真实的例子:
Thread myThread = getMyThread();
myThread.start();
myThread.sleep(5000);
乍一看,看起来你要求myThread睡5秒(5000毫秒),但这不是你在做什么.您要求当前线程休眠,因为最后一行与调用完全相同Thread.sleep(5000).第二个例子更明显是一种静态方法.
或者,这是另一个例子.假设您的静态字段是可变的.
public class Foo {
    public static int value = 1;
}
(由于其他原因,这个公共静态可变字段是一个坏主意,但简化了示例).现在让我们说你这样做:
Foo one = new Foo();
Foo two = new Foo();
one.value = 2;
two.value = 3;
System.out.println(one.value);
System.out.println(two.value);
有点看起来应该打印"2"然后打印"3",对吧?但是没有 - 它会打印"3","3"因为两个赋值.value实际上都是相同的静态字段.这只是一种视觉错觉,one或者这些two实例与任何东西都有关系.
Imho,从实例引用静态成员的能力是错误的.但它就在那里,所以你应该避免它.这是编译器试图建议你做的事情.
| 归档时间: | 
 | 
| 查看次数: | 8457 次 | 
| 最近记录: |