我正在尝试阅读枚举以更好地理解它们.
从枚举的javadocs我得到以下内容:
枚举类型是一种特殊的数据类型,它使变量成为一组预定义的常量.
对我来说,这听起来很像一个final变量.
我正在使用 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)
为什么?
我有两个同构类型的层次结构.第一个的基本类型是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) 我有一个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)
有任何想法吗?
我无法理解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.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)
谁能告诉我它们之间的区别?非常感谢。
class A { ... }
class B extends A implements Comparable<A> {
int compareTo(A aobject) { ... }
}
Run Code Online (Sandbox Code Playgroud)
通常我们Comparable使用类型参数实现B.但是java允许使用超类.
有没有我真的需要做这样的事情?
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关键字如何扮演调用子类的方法而不是父类的角色.
我不明白为什么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) 以下代码来自名为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)