[Java] noSuchMethodException na verandering return type

Pagina: 1
Acties:

  • a3konijn
  • Registratie: Oktober 2000
  • Laatst online: 20-05 07:27
Een raar probleem:

Ik heb van een java class enkele 'public static void' methodes verandert naar 'public static boolean'.

Deze code zit in een extern package. Als ik nu de veranderde methodes aanroep vanuit de webapplicatie (tomcat 5.0.27) op de volgende manier: someClass.someMethod();
wordt er een NoSuchMethodException gegooid, echter als ik de methode zo aanroep: boolean flag = someClass.someMethod(); dan werkt alles gewoon.

Ik heb alleen geen zin om alle aanroepen te gaan veranderen. Deze methodes worden namelijk een paar honderd keer aangeroepen vanuit de applicatie dus ik heb geen zin om deze oplossing overal toe te gaan passen.

Bovendien snap ik de melding niet. De methodes bestaan gewoon, alleen op de een of andere manier moet ik iets met het return type doen.

Iemand een verklaring en / of oplossing voor dit probleem?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Je kunt een functie niet als een procedure aanroepen, waar moet de teruggegeven waarde dan naar toe?
Wellicht kun je deze functie wel weer 'wrappen'.

Who is John Galt?


  • Janoz
  • Registratie: Oktober 2000
  • Nu online

Janoz

Moderator Devschuur®

!litemod

Waarschijnlijk heb je je externe package wel aangepast, maar je orginele applicatie niet opnieuw tegen dit nieuwe package gecompileerd. De orginele code is op zoek naar een signature die void returned. Toen je je testcode aanpaste werd deze wel tegen de meest recentste versie gecompileerd en werkte dat wel.

Dat was de verklaring. De oplossing is je project die de methode aanroept te cleanen en opnieuw compileren.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • a3konijn
  • Registratie: Oktober 2000
  • Laatst online: 20-05 07:27
Hmm, dat lijkt me toch een beetje vreemd.

In Java kan je de return waarde gewoon negeren of eventueel opslaan in een variabele die je dan voor niets aanmaakt.

nutteloos maar gewoon mogelijk is bijvoorbeeld het volgende:

String s = "test";
s.length();

  • a3konijn
  • Registratie: Oktober 2000
  • Laatst online: 20-05 07:27
Ik denk dat ik eens een clean compile ga doen van de applicatie. Heb de applicatie net even op een test-server gedeployed en daar werkt alles gewoon. :)

  • a3konijn
  • Registratie: Oktober 2000
  • Laatst online: 20-05 07:27
Yepp, recompile was oplossing. Hoe eenvoudig kan het leven zijn. Toch bedankt voor de tip :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
a3konijn: In Java kan je de return waarde gewoon negeren of eventueel opslaan in een variabele die je dan voor niets aanmaakt.
Klopt, maar in bytecode zit dat anders: daar worden methoden aangeroepen op basis van hun return type, naam, en argument typen. Het is in bytecode zelfs mogelijk om twee methoden foo() te hebben met verschillende return typen (bijvoorbeeld int en boolean). Overloading op basis van return typen is dus wel mogelijk in bytecode, maar niet in Java.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1