代码之家  ›  专栏  ›  技术社区  ›  Steve Schnepp

在java 1.4中重写方法时,如何避免“未使用的参数”警告?

  •  5
  • Steve Schnepp  · 技术社区  · 17 年前

    在这段代码中:

    public class MyClass {
        private Object innerValue;
        public Object getInnerValue() {
            return this.innerValue;
        }
        public void setInnerValue(Object innerValue) {
            this.innerValue = innerValue;
        }
    }
    
    public class MyClassReadOnly extends MyClass {
        MyClassReadOnly(MyClass cls) {
            // Make a field by field copy
            super.setInnerValue(cls.getInnerValue());
        }
        public void setInnerValue(Object innerValue) {
            throw new UnsupportedOperationException(
                                "This is a read-only instance"
                            );
        }
    }
    

    innerValue .

    我无法使用 @抑制警告()

    我考虑过插入这样的伪代码,但并不十分令人满意:

    public void setInnerValue(Object innerValue) {
        if (innerValue != null) { /* Do Nothing, but keep the compiler happy */ }
        throw new UnsupportedOperationException("This is a read-only instance");
    }
    
    5 回复  |  直到 17 年前
        1
  •  11
  •   Uri    17 年前

    警告不是问题,恐怕设计是。

    当我面临这种情况时,我创建了一个名为IMyX的接口,用于读取,一个子接口,用于写入,然后实际的类实现了IMutableMyX,因此也实现了IMyX。然后,我非常小心,只在需要时通过IMutableMyX,在所有其他情况下通过IMyX。

    我意识到这并没有回答你关于取消警告的问题。但警告可以被抑制、忽略或解决。未使用的参数通常是一种臭味,表明你的方法可能没有做预期的事情。方法应该只获取基本参数。如果不使用该参数,则该参数不是必需的,因此需要更改一些内容。

        2
  •  1
  •   Eddie    17 年前

    恐怕你被伪代码困住了。在C/C++中,你可以使用宏( #define _unused(x) ((void) x) (void) variable; 不是Java中的有效语句。

        3
  •  0
  •   Michael Myers KitsuneYMG    17 年前

    您可以安全地输入以下行: innerValue = null 位于函数顶部,用于所有未使用的参数。

        4
  •  0
  •   an0nym0usc0ward    17 年前

    我不会为了让编译器警告消失而玩任何“代码技巧”,希望编译器能够优化这些技巧。事实上,这个编译器警告真的那么有用吗?我只会禁用它。一旦你使用了Java 5,你就可以使用 @SuppressWarnings

    国际海事组织,这是一个坏主意 全部 可能的警告,仅仅因为它们存在,然后着手消除每一个警告。找出哪些警告对您的环境真正有意义,并禁用其余警告。

        5
  •  0
  •   Carl Manaster    17 年前

    推荐文章