2014-03-05 4 views
-2

У меня есть класс Pair Generic Type, и следующий способ вычитания дает мне ошибку как the operator - is not defined for T,T. Я искал и обнаружил, что link. Интересно, что это единственный способ перегрузки оператора на Java. Я думаю, что это не так просто. Я пришел с фона C++. ThanksВычитание общего типа в Java

public class Pair<T>{ 


    private T first; 
    private T second; 

    public T firstpairSub(Pair<T> s) { 
     return this.first - s.first; 
    } 
} 
+0

Если вы действительно хотите сделать это, вы могли бы использовать Scala, который, в конце концов, компилируется в Java – Mirco

+0

Кроме того перегрузкой операторов не представляется возможным в Java , так как вы даже не делаете никаких предположений о 'T', это просто неправильно, потому что любой может расширить ваш класс с помощью типа' Object', 'String' или' List'. – Smutje

+0

Генераторы Java не работают так же, как шаблоны C++. Генерики не являются шаблоном, из которого генерируются разные реализации, например, на C++. Вам нужно будет рассказать о дженериках, как если бы они были шаблонами. – Jesper

ответ

0

Вы не можете перегружать операторов на Java.

Оператор вычитания определяется только для числовых типов.

Что вы ожидаете от производства, скажем, Pair<String>? Как насчет Pair<Socket> или Pair<java.sql.Driver>?

+0

Да, если вам нужно использовать два сокета для вашего приложения, вы можете обернуть его в пару и сделать Socket1 и Socket2. Это имеет смысл для меня. – batuman

+1

Его точка в том, что ваш метод firstPairSub завершится неудачно, если пара была типа Socket. – LuigiEdlCarno

+0

Да, теперь понимаю. – batuman

0

Вы могли бы просто сделать преобразование сами:

public class Pair<T extends Number>{ 

... 

public T firstpairSub(Pair<T> s) throws Exception{ 
    if(this.first instanceof Integer && s.first instanceof Integer) 
     return (Number) ((Integer)this.first- (Integer)s.first); 
    if(this.first instanceof Double && s.first instanceof Double) 
    ... 

    throw new Exception("Invalid type") 

} 
+0

Итак, в чем смысл создания Generic T, если мне нужно использовать instanceof. У меня будет много примеров. – batuman

Смежные вопросы