为什么不能在参数中使用java,方法对于参数不适用

发布时间:2022-11-23

本文目录一览:

1、java可以使一个类的方法的参数这整个类中使用吗? 2、还是关于java泛型的问题:在静态方法中为什么不能引用类级别的类型参数? 3、JAVA参数中能使用void吗?

java可以使一个类的方法的参数这整个类中使用吗?

不可能,方法的参数的作用范围就是方法体内,类中不能共享因为不可见。 如果想要达到共享的目的,干脆就弄个成员变量,那样传进去就行了。

还是关于java泛型的问题:在静态方法中为什么不能引用类级别的类型参数?

你好,我觉得最主要的原因是因为泛型擦除。

class Demo<T> {
    public void add(T t) {
        //...
    }
}

编译后通过反编译:

D:\test>javap -s -p Demo
Compiled from "Demo.java"
public class Demo extends java.lang.Object{
    public Demo();
    Signature: ()V
    public void add(java.lang.Object);
    Signature: (Ljava/lang/Object;)V
}

所以,非静态方法正是由于需要先有对象,进而在使用泛型的时候可以确定安全检查的限制条件。

Demo<String> d = new Demo<String>();
d.add("str"); //这里你就只能添加String类型的。

而静态方法不需要构建对象,所以他在调用方法时,根本没有判断参数的约束条件,所以虚拟机压根就不希望这种事情发生,所以在编译时就报错了。

JAVA参数中能使用void吗?

不行. 明摆着是语法错误... void 是关键字,但不是所有关键字都能做返回类型。(如:int 可以,extends / package 就不行了) 即使你写成:

void f(void a){
    ...
}

好像在模仿

void f(int i){
    ...
}