2014-01-29 4 views
2

Я потратил часы, исследуя это, и я все еще очень смущен.Итак .... поддерживает ли Java поддержку перегрузки оператора?

Я, как и многие другие, искал это в Google и нашел this SO thread.

Однако недавно студент одного из моих курсов программирования сказал мне, что это неправда, и на самом деле инструктор проверил его. Черт, весь класс услышал это, и никто не оспаривал его. He offered this link from Java.net as proof.

я сказал ему сразу: «Это выглядит как JavaScript», но он указал на этот раздел:

class User { 
    List roles; 

    User() { 
    roles = new List(); 
    } 

    operator +(Role newRole) { 
    this.roles.add(newRole); 
    } 
} 

main() { 
    User alice = new User(); 
    Role adminUser = new Role("TIMESHEET_ADMIN", 3); 

    alice + adminUser; 
    print(alice.roles.length); 
} 

и сказал мне, что это было на самом деле Java. Я, не имея опыта работы в JS, не мог сказать, и он ушел (на данный момент), но я попытался поместить это в свою IDE (IntelliJ), и меня атаковали ошибки компилятора. Я даже не знал, с чего начать, исправив их, но главное - cannot resolve symbol "operator".

Я не ищу для обсуждения Java's built-in operator overloading. Я ищу окончательный ответ о том, могут ли пользователи в Java перегружать сами операторы.

+1

Ссылка java.net не отправляется на java.net – AntonH

+3

Похож на C#, но я не эксперт в этом. Основная проблема, которую я хотел бы получить, от ее получения до компиляции, - это использование «Список», «Главная» и «Печать». Java не имеет класса «List» в API Collections, он имеет интерфейс, который требует, чтобы метод 'length' выглядел как' length() ' – MadProgrammer

+0

- это действительно java? – Baby

ответ

12

Окончательный ответ: нет, Java не поддерживает перегрузку оператора, за исключением типов String. Но что более важно, более важный ответ на ваш вопрос заключается в том, что вы должны посмотреть в одном документе, Java Language Specification or JLS, который ответит на этот вопрос и на любой другой аналогичный вопрос о том, что Java делает или не содержит. Не обсуждайте ни с кем о Maybes или ifs. Ищите себя и убедитесь сами, что нет такой вещи, как перегрузка оператора для Java, за исключением магического типа String. Это все, что есть в JLS, и для этого оно и есть.

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