Portál AbcLinuxu, 12. května 2025 05:07

Dotaz: java problém s voláním metody, static fields...

4.5.2011 23:10 ttff
java problém s voláním metody, static fields...
Přečteno: 509×
Odpovědět | Admin
mám aplikaci, v appView píšu kód, pak mám vlastní třídu s metodou, jenž je static. Potřebuju z té static metody volat appView metodu, která sahá na jList.

Problém je, že ať už mám v méTřídě jakoukoliv metodu nemohu z ní volat GUI prvky (jsou private), musím volat tu mou metodu v appView. Jenomže ať už je má metoda v méTřídě static nebo ne, píše mi to, že: non-static method máMetoda() cannot be referenced from a static context

v C# jsem to řešil, že jsem ListBox udělal public. Co v Javě?

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

5.5.2011 01:27 Mips
Rozbalit Rozbalit vše Re: java problém s voláním metody, static fields...
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ten popis není zrovna nejsnazší k pochopení, ale myslím, že jsem pochopil, o co jde. Máte třídu AppView a v ní instanční proměnnou (field) nazvanou jList. Máte taky třídu MyClass a v ní metodu doSomethingWithJList(), pomocí které chcete manipulovat s oním fieldem jList:
class AppView {

    private JList jList;

    public List<Object> getItems() {
        //má něco dělat s jListem, který je z ostatních tříd nepřístupný
    }
    
}
public class MyClass {

    public static void myMethod() {
        //odtud se má něco udělat s JListem ze třídy AppView
    }

}

A ono to nejde a nevíte, jak na to.

On je totiž problém s tím statickým kontextem, jak píše chybová hláška.

Začnu trochu zeširoka:
Když chcete číst či zapisovat nestatický field, musíte specifikovat instanci třídy, jejíž field chcete číst či zapisovat. Tuto instanci specifikujete:

Přistupujete-li k fieldu z nestatické metody, znamená to, že sama tato nestatická metoda byla volána na nějaké instanci, jinak řečeno v kontextu nějaké instance.
Přistupujete-li k fieldu ze statické metody, tato metoda není volána v kontextu žádné instance (neboli je volána ve statickém kontextu) a tudíž nemůže být implicitně dána instance třídy, k jejímuž nestatickému fieldu chcete přistoupit.

Zpátky k vašemu příkladu:

Field AppView.jList je instanční proměnná (field), tudíž, chcete-li k ní přistupovat, musí být specifikována instance třídy AppView. Jestliže k ní přistupujete bez tečkové notace z metody getItems(), pak se tato instance převezme z kontextu metody getItems(). Aby metoda getItems() měla nějaký nestatický kontext (a ona ho musí mít, protože je nestatická), musí se volat buď pomocí tečkové notace (instanceAppView.getItems()) nebo musí být volána z nestatického kontextu třídy AppView (tedy z nestatické metody třídy AppView či jejího potomka).

Vy se ale zřejmě snažíte metodu getItems() volat způsobem, který žádnou instanci třídy AppView nespecifikuje.

Tím, že metodu myMethod() uděláte nestatickou, si jen vynutíte, že tato metoda musí být volána v kontextu instance třídy MyClass. Ale vy potřebujete instanci třídy AppView.

Řešení:
Rozmyslete si, s jakou instancí třídy AppView chcete pracovat a kdy a jak ji vytvoříte. Jakmile budete tuto instanci mít, můžete ji specifikovat jako kontext pro metodu AppView.getItems(), potažmo pro field AppView.jList.

5.5.2011 23:37 ttff
Rozbalit Rozbalit vše Re: java problém s voláním metody, static fields...
klobouk dolu a díky!
5.5.2011 08:21 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: java problém s voláním metody, static fields...
Odpovědět | | Sbalit | Link | Blokovat | Admin
V tomhle vám pomůže jedině nastudovat si základy objektového programování. Pro Javu doporučuju Učebnice jazyka Java od Pavla Herouta.
5.5.2011 09:59 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: java problém s voláním metody, static fields...
Spíš základy designu aplikace.
In Ada the typical infinite loop would normally be terminated by detonation.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.