Поддерживает ли Java перегрузку операторов? - PullRequest
5 голосов
/ 17 января 2012

Я работаю над проектом, который имеет объект с именем Vector2

public static class Vector2 {
        public Vector2 (float x, float y) {
            this.x = x;
            this.y = y;
        }

        public float x;
        public float y;

        public static Vector2 ZERO = new Vector2 (0, 0);
        public static Vector2 FORWARD = new Vector2 (0, 1);
        public static Vector2 LEFT = new Vector2 (1, 0);

        public static float Distance (Vector2 a, Vector2 b) {
            return (float) Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2));
        }
    }

и хотел бы сделать следующее:

Vector2 a = new Vector2 (2.32, 453.12);
Vector2 b = new Vector2 (35.32, 532.32);

Vector2 c = a * b;

// c.x = 2.32*35.32
// c.y = 453.12*532.32

float num = 5;
c = a * num;

// c.x = 2.32*5
// c.y = 453.12*5

Возможно ли это?Если так, как я могу это сделать, и как это называется?Заранее спасибо.

Ответы [ 5 ]

5 голосов
/ 17 января 2012

Нет, Java не поддерживает перегрузку операторов.

Как к сведению: если вы можете работать с другими языками, то C ++ и, как Java, C # поддерживают перегрузку операторов. Если в вашем проекте, например, Ray Tracing, много операций, связанных с вектором, то я бы на самом деле рассмотрел такой язык, как C #.

4 голосов
/ 17 января 2012

В Java нет перегрузки операторов. Лучшее, что вы можете сделать, - это использовать метод.

public Vector2 multiply(Vector2 that){
    return new Vector2(this.x * that.x, this.y * that.y);
}

Тогда, если a и b являются Vector2 объектами, вы можете сделать это

Vector2 c = a.multiply(b);
4 голосов
/ 17 января 2012

Java не допускает перегрузки операторов, как языки, такие как C ++.См. эту статью .Создайте вспомогательные функции, чтобы соответствовать тому, чего вы хотите достичь.

1 голос
/ 17 января 2012

То, что вы делаете, называется перегрузкой оператора.И хотя Java не поддерживает его (Google находит множество постов и мнений по этой теме), некоторые языки более высокого уровня, работающие на JVM, поддерживают Groovy.Так что если вы можете внедрить Groovy в свой проект, вы можете сделать это.Ваш Groovy-код будет компилироваться в тот же байт-код JVM, поэтому он будет полностью совместим с вашей Java и может вызывать существующую Java в вашем проекте.

http://groovy.codehaus.org/Operator+Overloading

1 голос
/ 17 января 2012

Как сказал Надир, это называется "перегрузкой операторов" и (что бы там ни было) не было включено в спецификацию Java. Вы можете найти его в C ++, если хотите увидеть его в действии.

В Java вам нужно добавить следующие методы в Vector2 класс:

public Vector2 multiplyBy(Vector2 otherVector);

public Vector2 multiplyBy(float multiplier);
...