2012-12-02 2 views
1

다형 생성자를 선언 할 방법이 있습니까? (과부하가되지 않도록하십시오!).매우 고급 메서드/생성자 (Java) - 실제 다형 인수 허용 - Sintax

1 클래스와 1 인터페이스의 isntanceof 인 인수를 지정하고 싶지만이 두 클래스 (인터페이스 구현 클래스)를 사용하여 새 클래스를 만들지는 않습니다.

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

하지만, 이러한 인수 "obj가"클래스 1과 Interface2의 인스턴스가 내가 이런 식으로 생각하는 것이있다 :

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

내가 생성자를 선언하려면, 즉 구문을 사용하여 일반적입니다 ... 또는이 인수에만 다형성을 지정하는 다른 구문. 클래스를 생성하고 싶지는 않습니다 : CubeRot extends Cube는 IRotable을 구현합니다. 왜냐하면 모든 큐브에 이러한 작업이있는 것은 아니기 때문입니다. 그리고 나는 (큐브) CubeRot의 다른 옵션을 원하지 않습니다. 반대의 경우, 모든 큐브 회전을 만듭니다. 아마도 IRotator는 큐브 또는 다른 클래스에서 구현되거나 구현되지 않을 수 있습니다. 모든 큐브를 회전 할 수 있기 때문에 ... 나는 새로운 클래스

class CubeRotatorThread extends Cube implements IRotator { 
} 

을 만들지 않으

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

:

나는 생성자에서 확인 사용 후 싶지 않아 큐브뿐만 아니라 회전을 구현합니다. T 클래스이기 때문에 ...

class CubeRotatorThread T extends Cube implements IRotator { 
} 

을, 나는 객체/인수를 원하는 :

나는 제네릭 클래스를 사용하지 않습니다.

나는 NotImplementsRotationException도 만들고 싶지 않습니다! 던지기. 내가 다형성 인수를 원하는

, 내가 원하는 진정한 다형성 방법

IT는 가능합니까? 그것을 검색했지만 생성자에서이 작업을 수행하는 구문을 찾지 못했습니다. 이것은 나를 위해 이상하다

Constructor(Class1 (Class2) args); 

:

나는 같은 다른 언어 (아마도 C# 또는 C++), 도움말 문서 또는 정의 문서에서 다른 코드에서 보았다. 그리고 나는 이것이 내가 원하는 것임을 확신하지 못합니다.

다형성 생성자가 존재하지 않으면 오라클이 생성해야한다고 생각합니다. 그것은 매우 유용합니다. 먼지 문서에 대한 유감

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

, 그것은 내 첫 번째입니다 –

답변

0
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) { } 
     }