2016-07-01 3 views
1

Это проблема Java внутренний класс и код показан ниже:Java внутренний класс использования

public class Load { 
    /* 
    static { //load 
     System.loadLibrary("lvb"); 
    }*/ 

    public class FILTER_T{ 

     HP05_T hp; 
     LP40_T lp; 
     NOTCH50_T notch; 
     // Load.FILTER_T.HP05_T hp; 
     // Load.FILTER_T.LP40_T lp; 
     // Load.FILTER_T.NOTCH50_T notch; 

     public class HP05_T { 
     public int[] buf; 
     public long y1; 
     public long y2; 
     public int ptr; 
     } 

     public class LP40_T { 
      public int[] buf; 
      public int ptr; 
     } 
     public class NOTCH50_T { 
      public int[] buf; 
      public int ptr; 
     } 

    } 

    public native void func1(FILTER_T filter); 

    public native int func2(FILTER_T filter, int in); 

    public native int[] func3(int a,int[] in,FILTER_T filter); 

    public static void main(String[] args) { 
     Load load = new Load(); 
     load.FILTER_T ff = new load.FILTER_T(); 
     load.func1(ff); 
     load.func2(ff, 120); 
    } 

} 

В соответствии

load.FILTER_T ff = new load.FILTER_T(); 

есть ошибка компиляции:

error: package load does not exist

Интересно, знает ли кто-нибудь проблему и как ее исправить.

+0

Входящее выражение экземпляра требуется только в выражении-экземпляре, а не в объявлении типа для переменной. –

+0

Вы можете использовать 'FILTER_T ff = new FILTER_T();' без префикса. –

+0

Почему они являются внутренними классами? Они, похоже, не нуждаются в ссылках на ссылки на их окружающие экземпляры, поэтому они могут быть статическими вложенными классами вместо внутренних классов. Ваше именование также не соответствует соглашениям Java и делает все общедоступным - это огромный запах кода. Во всяком случае, синтаксисом является 'FILTER_T ff = load.new FILTER_T();' –

ответ

6

Это внутренний, нестатический класс. Вы верны нам экземпляр внешнего класса для его создания. Тем не менее, правильный синтаксис:

FILTER_T ff = load.new FILTER_T();