Очень Продвинутый Метод / Конструктор (Java) - Принятие Полиморфных Реальных Аргументов - Синтаксис

Есть ли способ объявить полиморфные конструкторы? (пожалуйста, это не перегрузка!).

Я хочу указать аргумент isntanceof 1 class и 1 interface, но я не хочу создавать новый класс с этими обоими (класс реализует интерфейс).

Я хочу объявить конструктор, который обычно с синтаксисом:

class Clas {
  public Clas(Object obj) { ... }
}

но этот аргумент "obj" является экземпляром Class1 и Interface2, который я представляю так:

class CubeRotationThread {
  public CubeRotationThread(Cube c implements IRotable) {...}
  //...or...
  public CubeRotationThread(Cube c instanceof IRotable) {...}
}

... или любой другой синтаксис, который определяет полиморфность только для этого аргумента. Я не хочу создавать класс: CubeRot расширяет Cube, реализует IRotable, потому что не все кубы имеют эту работу. И я не хочу другой вариант приведения (Cube) CubeRot, для обратного, создания всех кубических вращающихся объектов. Возможно, IRotator может быть реализован или нет в кубе или в другом классе.

Я не хочу тогда использовать проверку в конструкторе:

if (obj instanceof Class) { myMethod(); }

Я не хочу создавать новый класс

class CubeRotatorThread extends Cube implements IRotator {
}

... потому что не все кубы могут вращаться и не только кубы реализуют вращения.

Я не хочу использовать универсальный класс:

class CubeRotatorThread T extends Cube implements IRotator {
}

... потому что T это класс, и я хочу объект / аргумент.

И я не хочу создавать NotImplementsRotationException тоже! для броска.

Я хочу полиморфный аргумент, я хочу настоящий полиморфный метод

ЯВЛЯЕТСЯ ЛИ ЭТО ВОЗМОЖНЫМ? Я искал это, но я не нашел синтаксис, чтобы сделать это в конструкторе.

Я видел в других кодах на другом языке (вероятно, C# или C++), справочные документы или документы определения, например:

Constructor(Class1 (Class2) args);

Это странно для меня. И я не уверен, что это то, что я хочу.

Если полиморфный конструктор не существует, я думаю, что Oracle должен его создать. Это очень полезно.

class CubeRotationThread {
    public CubeRotationThread(Cube arg implements IRotator) {}
    public CubeRotationThread(Cube arg extends IRotator) {}
    public CubeRotationThread(Cube arg instanceof IRotator) {}
}

1 ответ

GENERIC METHOD
http://docs.oracle.com/javase/tutorial/java/generics/bounded.html
http://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html
http://docs.oracle.com/javase/tutorial/java/generics/boundedTypeParams.html

I FOUND IT ! :)

    public <Q extends Class1 & Iterf2 & Interf3> Return Method(Q Object) { }

Q is the private mixture class you want with Extends & implements & implements...

here is with multiple objects:


    public <Q extends Class1 & Iterf2 & Interf3, W extends Class2 & Inter1 & Inter2> Return Method(Q arg1, W arg2) { }



use commas to separate classes inside <>, and use & to inherit

use commas to inherit directli in a class declaration


Here is very complete:

    class Generic extends String implements Implements1, Implements2 {}

    class Generic <T extends Class1 & Interface1 & Interface2> extends Class2 <W extends 

    Class3 & Iterface 5> implements Interface3, Interface4 {
            public <Q extends Class2 & Interface4, R extends Class4 & Interface6> Generic(T wtf, Q arg, R arg) { }
        }
Другие вопросы по тегам