Powiel możliwe:
Why does this() and super() have to be the first statement in a constructor?„wywołanie konstruktora musi być pierwszą instrukcją w konstruktorze” problem w Javie
Chciałabym mieć łańcuch konstruktora w Javie. Na przykład, przy pierwszym konstruktorze jako parametr mam ciąg i wywołuję drugi konstruktor, gdy tworzę obiekt z ciągu parametrów.
public class IMethodFinder {
public IMethodFinder(String projectName, String methodName,
int numberOfParameters) {
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
IJavaProject javaProject = JavaCore.create(project);
this(javaProject, methodName, numberOfParameters);
}
public IMethodFinder(IJavaProject javaProject, String methodName,
int numberOfParameters) {
...
}
}
Jednak otrzymałem komunikat o błędzie "Błąd konstruktora musi być pierwszym stwierdzeniem w konstruktorze".
zrobiłem wspólny kod, który jest współdzielony między dwoma konstruktorów, ale nie jestem pewien, że to jedyne rozwiązanie, aby ominąć ten problem.
public class IMethodFinder {
public IMethodFinder(IJavaProject javaProject, String methodName,
int numberOfParameters) {
dosomething(javaProject, methodName, numberOfParameters);
}
public IMethodFinder(String projectName, String methodName,
int numberOfParameters) {
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
IJavaProject javaProject = JavaCore.create(project);
dosomething(javaProject, methodName, numberOfParameters);
}
private void dosomething(IJavaProject javaProject, String methodName,
int numberOfParameters)
{
...
}
}
- Dlaczego Java wymaga połączenia konstruktora jako pierwsze pismo? Jaka jest idea tego wymagania?
- Co to jest konwencja Java dla mojej sprawy? Czy popularna metoda wywoływania to dobra droga?
tak, wywołanie 'init () 'funkcja od twojego konstruktora jest wspólna. –
Można po prostu przepisać treść pierwszego konstruktora jako: 'this (JavaCore.create (ResourcesPlugin.getWorkspace(). GetRoot(). GetProject (projectName)), methodName, numberOfParameters);' – Alex