我目前使用兩個類都代表一個數據結構(像一個特殊的緩衝區,但爲了簡單在這個例子中,讓我們假設三字段)工作在本地類型;一個是long
,另一個是float
(所以兩者都在處理本機類型)。爲了避免代碼加倍,直接的方法是在類型<T>
上實現泛型,然後有兩個用戶,一個用於<long>
,一個用於<float>
。Java中的本機類型(原語)的泛型(或其他方法)
AFAIK這是不可能的本地類型;只有從Object
派生的對象纔有可能。
有沒有其他的方法來避免代碼加倍否則不可避免?由於性能方面的原因,使用非本地類型(如Integer
)不是一種選擇。
當前的代碼,剝離下來僅僅有三個字段的小例子:
public class TupleFloat {
private float field1;
private float field2;
private float field3;
public TupleFloat(float a, float b, float c) {
field1 = a; field2 = b; field3 = c;
}
public float sum() {
return field1 + field2 + field3;
}
}
和
public class TupleLong {
private long field1;
private long field2;
private long field3;
public TupleLong(long a, long b, long c) {
field1 = a; field2 = b; field3 = c;
}
public long sum() {
return field1 + field2 + field3;
}
}
使用泛型:
public class Tuple<T> {
private T field1;
private T field2;
private T field3;
public Tuple<T>(T a, T b, T c) {
field1 = a; field2 = b; field3 = c;
}
public T sum() {
return field1 + field2 + field3;
}
}
但這不會爲本地類型工作(Tuple<float> x;
)。
有沒有其他的方法來避免代碼加倍否則不可避免?甚至有可能是一個最佳實踐如何解決這樣的問題?
你可以簡單地使用包裝類'Float','Integer', '長'等 – Dragondraikk 2015-03-02 13:23:02
由於性能方面的原因,我只是添加了需要堅持原生類型的信息。 – Alfe 2015-03-02 13:23:56
不可能,因爲泛型意味着要與對象一起工作。 – SMA 2015-03-02 13:25:28