클래스가 추상 클래스인지 확인하는 방법이 필요합니다. 누구든지 나를 도울 수 있을까?클래스가 추상 클래스인지 확인하는 방법이 있습니까?
4
A
답변
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
거울 아마이 정보를 제공해야하지만,에 나타나지 않습니다
또한이 기능 요청을 스타. 내가 생각할 수있는 것은 클래스를 인스턴스화하고 예외를 잡으려고하는 것이지만, 이것은 생성자 서명을 정적으로 알아야한다는 것을 의미합니다. 무엇을하려고합니까? –
클래스가 추상 클래스인지 아닌지를 확인한 Java 코드 스니 j을 이식하려고했는데,이를 기반으로 리플렉션을 사용하여 인스턴스를 작성했습니다. 이제 코드를 검토하면이 확인 작업을 수행 할 필요가 없습니다. 오류가 발생하는지 간단하게 인스턴스화하고 확인할 수 있습니다. 고맙습니다. – Tiago