Die Möglichkeit, dieses Problem zu umgehen, besteht darin, den Typ mit instanceof
zu überprüfen und einen Cast zu verwenden. Gefällt mir:
private void initialize(HttpRequestBase method)
{
if(method instanceof HttpPost)
{
String body = "body";
HttpEntity entity = new ByteArrayEntity(body.getBytes("UTF-8"));
((HttpPost) method).setEntity(entity);
}
}
Aber immer wenn Sie eine Besetzung verwenden, sollten Sie bedenken, dass es eine elegantere Lösung geben kann. In diesem Fall würde ich argumentieren, dass eine elegantere Lösung wäre, Methodenüberladung zu verwenden und eine spezifische Methode für HttpPost
Instanzen zu haben.
private void initialize(HttpPost method)
{
String body = "body";
HttpEntity entity = new ByteArrayEntity(body.getBytes("UTF-8"));
method.setEntity(entity);
}
Natürlich würde dies bedeuten, eine separate Methode für HttpGet
benötigen würde (und alle anderen Unterklassen von HttpRequestBase
Sie unterstützen möchten). Jeder gemeinsame Code, der zwischen GET
und POST
geteilt wird, sollte in kleinere Methoden extrahiert werden, die von beiden initialize()
Methoden aufgerufen werden.
private void initialize(HttpGet method)
{
// ...
}
dies natürlich, könnten Sie Niederlagen den ganzen Sinn zu versuchen, argumentieren sowohl einen Handler für GET
und POST
zu erstellen. Und du hättest recht. Aber Sie sollten dann die gesamte Übung des Versuchs, eine Methode zu erstellen, die beide behandelt, in Frage stellen. Vielleicht ist das eleganteste Design, sie getrennt zu behandeln. Genau das haben die Autoren des von Ihnen verwendeten Frameworks getan.
Sie wissen, dass Ihre 'if' Bedingung * niemals * wahr sein wird, nicht wahr? Jede vorhandene Objektreferenz, die mit einem neuen Objekt verglichen wird, gibt "false" zurück. – RealSkeptic
Oh, du hast Recht. Irgendeine Annäherung? –
'if (Methodeninstanz von HttpPost)' –