2012-01-24 2 views
2

Я использовал Java 1.7 для своего приложения Libgdx, однако я обнаружил, что получаю много ошибок «@Override». Поэтому после поиска в Интернете я узнал, что должен работать с совместимостью с Java 1.6, чтобы предотвратить эту ошибку. Перейдя в window-> preferences-> java-> compiler и изменив совместимость с 1.6, я обнаружил, что все еще получаю ошибки @Override (метод ... должен переопределить метод суперкласса).Android @Override issues

Любая идея, почему это все равно будет происходить? Мне действительно нужно указать «@Override» для функции переопределения и выполнения в соответствии с графиком интерфейса/мастер-класса?

Вот код, если это помогает:

package cowdawg.libgdx.namespace; 

import java.io.IOException; 
import java.io.InputStream; 

import javax.microedition.khronos.opengles.GL10; 

import com.badlogic.gdx.InputProcessor; 
import com.badlogic.gdx.files.*; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.ApplicationListener; 
import com.badlogic.gdx.graphics.GL11; 
import com.badlogic.gdx.graphics.Mesh; 
import com.badlogic.gdx.graphics.OrthographicCamera; 
import com.badlogic.gdx.graphics.PerspectiveCamera; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.Texture.TextureFilter; 
import com.badlogic.gdx.graphics.Texture.TextureWrap; 
import com.badlogic.gdx.graphics.g3d.loaders.obj.ObjLoader; 

public class LifeCycle implements ApplicationListener { 

    String head; 
    Mesh model; 
    private PerspectiveCamera camera; 

    @Override 
    public void create() { 
     //super.onCreate(savedInstanceState); 
     //setContentView(R.layout.main); 

     InputStream stream = null; 
     try 
     { 
      stream = Gdx.files.internal("Head/Head.obj").read(); 
      model = ObjLoader.loadObj(stream,true); 
      stream.close(); 
     } 
     catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     Gdx.gl.glEnable(GL10.GL_DEPTH_TEST); 
     Gdx.gl10.glTranslatef(0.0f, 0.0f, -3.0f); 

     //Mesh m; 
     //InputStream in = Gdx.files.internal("data/cube.obj").read(); 
     //m = ObjLoader.loadObj(in); 
     //m.render(GL10.GL_TRIANGLES); 
    } 

    @Override 
    public void dispose(){ 
    } 

    @Override 
    public void pause(){ 
    } 

    protected int lastTouchX; 
    protected int lastTouchY; 
    protected float rotateZ = 0.01f; 
    protected float increment = 0.01f; 

    @Override 
    public void render() 
    { 
     Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
     camera.update(); 
     camera.apply(Gdx.gl10); 
     Gdx.gl10.glTranslatef(0.0f, 0.0f, -3.0f); 
     Gdx.gl10.glRotatef(rotateZ, rotateZ, 5.0f, rotateZ); 
     model.render(GL10.GL_TRIANGLES); 

     if (Gdx.input.justTouched()) 
     { 
     } 
     else if (Gdx.input.isTouched()) 
     { 
     } 
     rotateZ += increment; 
     System.out.println(""+rotateZ); 
    } 

    @Override 
    public void resize() 
    { 

    } 

    @Override 
    public void resume() 
    { 

    } 

    @Override 
    public void resize(int arg0, int arg1) { 
     // TODO Auto-generated method stub 

    } 
} 
+0

Любопытно, чтобы увидеть ответ здесь. Я не читал о языке Java, как у меня о языках .Net, но у меня был коллега, который всегда говорил, что «все функции на Java виртуальны». Это скажет мне, что @Override избыточно, не так ли? – Rich

+0

@Override не обязательно, это просто для удобства, поэтому, если это дает вам проблемы, вы можете удалить его. Тем не менее, было бы лучше, если бы вы нашли причину проблемы и исправили ее. – Jave

+1

Сделайте чистую сборку. –

ответ

3

@Override аннотаций просто защитный механизм. Это просто подсказка для компилятора, метод предназначен для переопределения родительского метода. Если метод не является переопределением родительского метода, запускается ошибка компилятора.

Использование optional, но может быть полезно для определения имени метода/опечаток параметра.

+0

Спасибо dmaxi, определенно оценил :). Я так долго ломал голову об этом –

2

ли я на самом деле нужно указать «@Override» для функции переопределить

Нет, это не является обязательным и он должен генерировать предупреждение.

С другой стороны, API Androids заставляет вас (и генерирует ошибку времени выполнения) для вызова супер для определенных методов. см. здесь Android Activity which overridden functions must call super.*

+1

Также спасибо Петру, безусловно, признателен за вход, и ссылка была очень полезной :). –