相关疑难解决方法(0)

在Java中使用Enum作为单例的最佳方法是什么?

基于SO问题编写的最佳单例实现在Java中 - 即使用枚举创建单例 - 有什么区别/优点/缺点(构造函数省略)

public enum Elvis {
    INSTANCE;
    private int age;

    public int getAge() {
        return age;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后打电话 Elvis.INSTANCE.getAge()

public enum Elvis {
    INSTANCE;
    private int age;

    public static int getAge() {
        return INSTANCE.age;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后打电话 Elvis.getAge()

java singleton

85
推荐指数
4
解决办法
8万
查看次数

枚举可以有抽象方法吗?

枚举可以有抽象方法吗?如果是这样,有什么用,并给出一个场景来说明这种用法.

java enums abstract

43
推荐指数
4
解决办法
3万
查看次数

java中的Singleton类

我正在思考编写单例类的其他方法.那么这个类被认为是一个单例类吗?

      public class MyClass{
            static Myclass myclass;

            static { myclass = new MyClass();}

            private MyClass(){}

            public static MyClass getInstance()
            { 
                return myclass;
            }
       }
Run Code Online (Sandbox Code Playgroud)

因为静态块只运行一次.

java singleton design-patterns

14
推荐指数
2
解决办法
1万
查看次数

如何实现具有枚举的接口,其中接口扩展为Comparable?

考虑以下代码:

public interface Foo extends Comparable<Foo> {}

public enum FooImpl implements Foo {}
Run Code Online (Sandbox Code Playgroud)

由于类型擦除的限制,我收到以下错误:

java.lang.Comparable不能用不同的参数继承:<Foo><FooImpl>

我有以下要求:

  • FooImpl 需要是一个枚举,因为我需要将它用作注释中的默认值.
  • 我的界面合同是它需要具有可比性.

我已经尝试在接口中使用泛型边界,但Java不支持.

java generics enums interface comparable

11
推荐指数
2
解决办法
2万
查看次数

Eclipse喜欢它,javac讨厌它,它是一个带有界面的枚举

Eclipse indigo,java 1.6

public interface I {
  String getName();
}

/* and in another file */

public enum E implements I {
  E1() {
     String getName() { return "foo"; }
  };
}
Run Code Online (Sandbox Code Playgroud)

在Eclipse中,这有效!其他类可以在类型I的引用上调用getName().实际的javac拒绝它,声称枚举中没有getName()这样的东西.这只是一个Eclipse bug吗?

请注意,对此有用的是枚举器中的方法定义.如果我做正常的事情,它在Eclipse和Javac中都可以正常工作,并且在枚举的底部定义了返回字段值的函数.

java eclipse enums

11
推荐指数
2
解决办法
790
查看次数

Enum类如何扩展另一个外部库类?

现在,我有一个现有的类,我想将其重构为一个Enum。该类当前扩展了另一个类,该类来自外部库。我仍然想从扩展类的某些逻辑中受益,同时希望进行重构。应该怎么做?

在Java中,一个enum类不能扩展另一个类,而可以实现interface。或将其重构为枚举的想法已经是错误的吗?让我在下面的示例代码中展示它。

假设一个现有的类Existing正在扩展另一个类Parent,并且Parent类来自外部库,它不是接口。

class Existing extends Parent{
    public static final Existing A = new Existing(...);
    ....
    public static final Existing Z = new Existing(...);

    public Existing(Srting attr1, String attr1){
        super(attr1, attr2);
    }

    public Existing(String attr1){
       super(attr1);
    }
}
Run Code Online (Sandbox Code Playgroud)

这个想法是让那些静态的final字段成为Enums,例如:

enum NewDesign{
     A(attr1, attr2),
     B(attr1),
     C(attr1, attr2)
     //...;
     //constructor etc.
     //...
}
Run Code Online (Sandbox Code Playgroud)

并可能在需要时添加新的额外属性,如下所示:

enum NewDesign{
  A(attr1, attr2, newAttr),
  B(attr1, newAttr),
  C(attr1, attr2, newAttr),
  //...
  //constructor etc.
  //...
}
Run Code Online (Sandbox Code Playgroud)

java inheritance enums interface

7
推荐指数
1
解决办法
214
查看次数

如何从Enum返回一个实例?

考虑到我有Algorithm枚举

public enum Algorithm {
  SHA1("sha1"),
  HMAC("hmac"),;

  Algorithm(final String algorithm) {
    this.algorithm = algorithm;
  }
  private final String algorithm;

  public String getAlgorithm() {
    return algorithm;
  }
}
Run Code Online (Sandbox Code Playgroud)

我有不同的算法

public class Sha1 {
   public static String hash(final String text, final byte[] sb) {...}
}
Run Code Online (Sandbox Code Playgroud)

public class Hmac {
   public static String hash(final String text, final byte[] sb) {...}
}
Run Code Online (Sandbox Code Playgroud)

当有人打电话时,我想返回他们的实例

Algorithm.SHA1.getInstance()
Run Code Online (Sandbox Code Playgroud)

  • 我怎么能返回实例,因为我的方法是静态的?(它是静态的,因此多个线程不能互相播放数据)

java enums

6
推荐指数
1
解决办法
869
查看次数

为两个完全不同的类创建一个比较器是不好的做法吗?

我想知道是否可以将两个比较器组合成一个比较器,用于两个完全不同的类.对象将按字母顺序排序,字符串类型name属性存在于两个类中,这就是我创建单个比较器的原因.

/**
 * Comparator to sort Book or Magazine alphabetically based on
 * their String type name property.
 */    
public class BookOrMagazineComparator implements Comparator<Object> {

        @Override
        public int compare(Object o1, Object o2) {
            if (o1 != null && o2 != null) {
                if (o1 instanceof Book && o2 instanceof Book) {
                    Book b1 = (Book) o1;
                    Book b2 = (Book) o2;
                    return b1.getName().compareTo(b2.getName());
                } else if (o1 instanceof Magazine && o2 instanceof Magazine) {
                    Magazine m1 = (Magazine) …
Run Code Online (Sandbox Code Playgroud)

java

4
推荐指数
1
解决办法
177
查看次数

编译器认为使用 arg.getClass().cast(arg) 调用构造函数是递归的,尽管这是错误的

我有一个接口,它是和枚举Commodity的超类型。另外,还有一个具有多个构造函数的类:ItemConsumableOption

class Option{
    Option(Item c,int price){. . .}
    Option(Consumable c,int price){. . .}
    Option(Commodity c,int price){
        this(c.getClass()!=Commodity.class?c.getClass().cast(c):Item.EMPTY,price);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

编译器认为这将导致无限递归,但显然不会。

Recursive constructor invocation Option(Commodity, int)

如何对他说“闭嘴,伙计,我知道我在做什么!”?

java compiler-errors class

-4
推荐指数
1
解决办法
78
查看次数