2013-12-18 43 views
4

我想創建一個模板函數,它依賴於泛型類型支持++--的能力。我們知道,Java那樣支持操作符重載,所以顯然我需要定義需要increment()decrement()功能的接口:支持模板類遞增和遞減的最佳方式

public interface Quantized<E> extends Comparable<E> { 
    public <E extends Quantized> E increment(); 
    public <E extends Quantized> E decrement(); 
} 

public class Sequencer<E extends Quantized>{ 
    private E value; 

    public <E extends Quantized> E doSometingWithSequence(){ 
    ... 
    E rv = value.increment(); 
    return rv; 
    } 
} 

如果我想模板支持任何類,那麼即使知道的接口說支持++--是不夠的,因爲Java不允許我們爲類實現運算符。 但是,如果允許模板函數支持Integer等類型,而不需要包裝類來實現接口Quantized,那將會很不錯。

有沒有辦法定義一個新的接口(除了定義一個抽象類)?

+1

不使用包裝處理相同的方式處理主體和對象是棘手的。 Primatives是爲速度而構建的,並不符合java的其餘部分。 –

+3

您可以編寫一個包裝,只需[Number](http://docs.oracle.com/javase/7/docs/api/java/lang/Number。 HTML)。 –

+2

如果你想看到http://amelentev.github.io/java-oo/在java中的操作符重載 – vandale

回答

0

如果您需要泛型,沒有其他變體。這是通用檢查類的主要目的是在編譯時有方法。但是你可以用反射來寫這個功能。檢查對象是否在運行時有增量方法並調用它。