小编Kon*_*kov的帖子

枚举和最终变量有什么区别?

我正在尝试阅读枚举以更好地理解它们.

从枚举的javadocs我得到以下内容:

枚举类型是一种特殊的数据类型,它使变量成为一组预定义的常量.

对我来说,这听起来很像一个final变量.

  1. 真正的区别是什么?
  2. 你什么时候用一个而不是另一个?
  3. 枚举只是一个可以成为一组事物的最终变量吗?

java enums

5
推荐指数
2
解决办法
9591
查看次数

MongoDB 唯一索引不起作用

我正在使用 Java 中的 Mongodb。

我创建一个集合和一个索引,如下所示:

collection = mongoClient.getDB(DB_NAME).getCollection(COLLECTION_NAME)
collection.ensureIndex(new BasicDBObject(['customerReference': 1, 'unique': true]))
Run Code Online (Sandbox Code Playgroud)

当我检查 mongo shell 时,我看到:

{ 
   "v" : 1, 
   "key" : { "customerReference" : 1, "unique" : true }, 
   "ns" : "diagnostics.diagnosticData", 
    "name" : "customerReference_1_unique_" 
}
Run Code Online (Sandbox Code Playgroud)

但我仍然可以插入重复项:

{ 
  "_id" : ObjectId("52f3ba8a7d841c01680e0bc5"), 
  "customerReference" : 3, 
  "data" : "original data", 
  "created" : ISODate("2014-02-06T16:38:34.191Z") 
}
{ 
  "_id" : ObjectId("52f3ba8a7d841c01680e0bc6"), 
  "customerReference" : 3, 
  "data" : "duplicate data", 
  "created" : ISODate("2014-02-06T16:38:34.194Z") 
}
Run Code Online (Sandbox Code Playgroud)

为什么?

java groovy mongodb

5
推荐指数
1
解决办法
5192
查看次数

Java泛型:<B扩展BaseB>不匹配<?扩展BaseB>

我有两个同构类型的层次结构.第一个的基本类型是BaseA,第二个的基本类型是BaseB.我知道如何将BaseB的任何子类的任何对象转换为其对应的BaseA子类型.我想实现一个方法,它接受BaseB类型的对象确定其类并构造相应的BaseA子类型的对象.示例代码:

public interface BaseA...
public interface BaseB...
public class DerA implements BaseA...
public class DerB implements BaseB...
...
public interface Transform<A,B> {
    A toA (B b);
}

public class DerAtoDerB implements Transform<DerA,DerB> {
    DerA toA (DerB b){...}
}

public class Transformations {
    private static Map<Class<?>, Transform<? extends BaseA, ? extends BaseB>> _map = 
        new HashMap<>();
static {
    _map.put(DerB.class, new DerAtoDerB());
    }

public static <B extends BaseB> BaseA transform(B b){
    Transform<? extends BaseA, ? extends BaseB> t = _map.get(b.getClass());
    return t.toA(b); …
Run Code Online (Sandbox Code Playgroud)

java generics

5
推荐指数
1
解决办法
589
查看次数

从字节数组转换为字符串并与另一个字符串(java)进行比较

我有一个UDP服务器/客户端,可以发送和接收信息.在Client将发送例如"TEST"给服务器,服务器将接收"TEST"在一个byte[]数组表示并将其转换成String使用String(byte[])构造.然后我需要String使用该equalsIgnoreCase方法将新接收的字符串与另一个字符串进行比较.但它不起作用......

这是我的代码示例:

DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
//Client sent "TEST"
String sentence = new String(receivePacket.getData(), "UTF-8");
System.out.println("RECEIVED: " + sentence);
System.out.println(sentence.equalsIgnoreCase("TEST")); //This gives me FALSE
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

java arrays string bytearray

5
推荐指数
1
解决办法
798
查看次数

<T>如何处理String和Integer

我无法理解T是如何使用Integer和String的.在显示函数中,T处理Integer和String.这段代码是如何工作的?

class firstBase {
   <T> void display(T give_num, T give_String) {
        System.out.println("The given number is = " 
                           + give_num + " The given String is  =  " + give_String);

        System.out.println("The class of given number is = " 
                           + give_num.getClass() + 
                           " The class of given_String is = "+give_String.getClass());
    }
 }


public class testanonymous {
    public static void main(String[] args) {
        firstBase fb = new firstBase();
        fb.display(100, "xyz");
    }
}
Run Code Online (Sandbox Code Playgroud)

java generics

5
推荐指数
1
解决办法
94
查看次数

将对象数组转换为通用数组

目前,我正在查看 java.util.ArrayList 的源代码。现在我发现函数public void ensureCapacity(int minCapacity)将一个对象数组转换为一个通用数组,就像下面的代码:

 E[] newData = (E[]) new Object[Math.max(current * 2, minCapacity)];
Run Code Online (Sandbox Code Playgroud)

但是,当我将数组声明为特定类型时,IDE 将显示错误。

Object[] arr = new Object[10];
    int[] arr1 = (int[]) new Object[arr.length];
Run Code Online (Sandbox Code Playgroud)

谁能告诉我它们之间的区别?非常感谢。

java generics arraylist typecasting-operator

5
推荐指数
1
解决办法
2868
查看次数

何时实现Comparable <超类X>而不是Comparable <X>?

class A { ... }


class B extends A implements Comparable<A> {
    int compareTo(A aobject) { ... }
}
Run Code Online (Sandbox Code Playgroud)

通常我们Comparable使用类型参数实现B.但是java允许使用超类.

有没有我真的需要做这样的事情?

java generics

5
推荐指数
1
解决办法
155
查看次数

关键词super如何在java-Java Puzzle中起作用

public class B {

    public B() {

    }

    private void m0(){
        System.out.println("BO");
    }
    public void m1(){
        System.out.println("B1");

    }

    public void test(){
        this.m0();
        this.m1();
    }
}



public class D extends B{

    /**
     * 
     */
    public D() {

    }

    public void m0(){
        System.out.println("DO");
    }
    public void m1(){
        System.out.println("D1");

    }

    public void test(){
      super.test();
    }

    public static void main(String[] args) {
        B d=new D();
        d.test();
    }


}
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么输出BO,D1而不是BO,B1.我没有得到super关键字如何扮演调用子类的方法而不是父类的角色.

java inheritance private super

5
推荐指数
1
解决办法
102
查看次数

通用扩展和实现

我不明白为什么Company编译.我认为它检查extends但不是为了implements

public interface Employee

public class HourlyEmployee implements Employee

public class Company<T extends Employee>

Company<HourlyEmployee> company = new Company<>();
Run Code Online (Sandbox Code Playgroud)

java generics

5
推荐指数
2
解决办法
2547
查看次数

Java泛型基于返回类型转换?

以下代码来自名为ButterKnife的Android库.我正在弄清楚它是如何工作的.

@SuppressWarnings("unchecked") // That's the point.
  public <T> T castParam(Object value, String from, int fromPosition, String to, int toPosition) {
    try {
      return (T) value;
    } catch (ClassCastException e) {
      throw new IllegalStateException("Parameter #"
          + (fromPosition + 1)
          + " of method '"
          + from
          + "' was of the wrong type for parameter #"
          + (toPosition + 1)
          + " of method '"
          + to
          + "'. See cause for more info.", e);
    }
  }
Run Code Online (Sandbox Code Playgroud)

我试图重新创建此函数的行为:

  @SuppressWarnings("unchecked")
    public static …
Run Code Online (Sandbox Code Playgroud)

java generics casting wildcard

5
推荐指数
2
解决办法
1515
查看次数