2013-02-12 2 views
4

클래스가 추상 클래스인지 확인하는 방법이 필요합니다. 누구든지 나를 도울 수 있을까?클래스가 추상 클래스인지 확인하는 방법이 있습니까?

+0

거울 아마이 정보를 제공해야하지만,에 나타나지 않습니다

또한이 기능 요청을 스타. 내가 생각할 수있는 것은 클래스를 인스턴스화하고 예외를 잡으려고하는 것이지만, 이것은 생성자 서명을 정적으로 알아야한다는 것을 의미합니다. 무엇을하려고합니까? –

+0

클래스가 추상 클래스인지 아닌지를 확인한 Java 코드 스니 j을 이식하려고했는데,이를 기반으로 리플렉션을 사용하여 인스턴스를 작성했습니다. 이제 코드를 검토하면이 확인 작업을 수행 할 필요가 없습니다. 오류가 발생하는지 간단하게 인스턴스화하고 확인할 수 있습니다. 고맙습니다. – Tiago

답변

2

불행히도 지금 당장은 대답 할 수 없습니다.

저스틴이 언급했듯이 반사 기능에는 Mirrors API이 있습니다. 그러나 "추상적 인 것"에 대한 깃발이없는 것 같습니다.

이 당신이보고 싶은 기능이있는 경우, 당신은 여기에 기능 요청 제기 할 수 있습니다 : http://dartbug.com/new

1

newInstance 부분이 있는지 확인하기 위해 확장해야 뭔가

library x; 

import 'dart:mirrors'; 

abstract class MyAbstract { 
    void doSomething(); 
} 

class MyConcrete{ 
} 

void main(List<String> args) { 
    print('MyAbstract: ${isAbstract(MyAbstract)}'); 
    print('MyConcrete: ${isAbstract(MyConcrete)}'); 
} 

bool isAbstract(Type t) { 
    ClassMirror cm = reflectClass(t); 
    if(cm.declarations.values.firstWhere(
     (MethodMirror mm) => mm.isAbstract == true, orElse:() => null) != null) { 
    return true; 
    } 
    try { 
    InstanceMirror i = cm.newInstance(new Symbol(''), []); 
    } catch(e) { 
    return (e is AbstractClassInstantiationError); 
    } 
    return false; 
} 

처럼 당신은 할 수 기본 생성자가 없으며 대신 명명 된 생성자를 사용하십시오.

AFAIR 최근에이 방법을 변경하면 더 이상 작동하지 않을 수 있지만 추상화 된 클래스를 인스턴스화 할 수 있어야한다면 (더 이상 작동하지 않을 수 있지만 이슈 추적기에서 무언가를 찾을 수는 없습니다.) a discussionAdd a method to check if a class is abstract