【问题标题】:Android @Override issuesAndroid @Override 问题
【发布时间】:2012-01-24 15:32:35
【问题描述】:

我在我的 Libgdx 应用程序中使用 Java 1.7,但是我发现我遇到了很多“@Override”错误。所以在网上搜索之后,我发现我应该运行 Java 1.6 兼容性来防止这个错误。转到 window->preferences->java->compiler 并将兼容性更改为 1.6 后,我发现我仍然收到 @Override 错误(方法...必须覆盖超类方法)。

知道为什么这仍然会发生吗? 我真的需要为一个函数指定“@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

    }
}

【问题讨论】:

  • 很想在这里看到答案。我没有像阅读 .Net 语言那样阅读 Java 语言,但我有一位同事总是说“Java 中的所有函数都是虚拟的”。这会告诉我@Override 是多余的,对吧?
  • @Override 不是必需的,它只是为了方便起见,所以如果它给您带来问题,您可以将其删除。不过,如果您能找到导致问题的原因并加以解决,那当然是最好的。

标签: java android eclipse compiler-construction overriding


【解决方案1】:

@Override 注解只是一种安全机制。这只是对编译器的提示,该方法旨在覆盖父方法。如果方法不是父方法的覆盖,则会触发编译器错误。

使用它是optional,但对于检测方法名称/参数拼写错误可能很有用。

【讨论】:

  • 感谢 dmaxi,非常感谢 :)。我为此绞尽脑汁很久
【解决方案2】:

我真的需要为要覆盖的函数指定“@Override”吗

不,它是可选的,它应该产生一个警告。

另一方面,Android API 会强制您(并生成运行时错误)为某些方法调用 super。看这里Android Activity which overridden functions must call super.*

【讨论】:

  • 也感谢彼得,非常感谢您的输入,链接非常有帮助:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
相关资源
最近更新 更多