Java 将对象作为参数传递

Java 将对象作为参数传递,java,function,object,Java,Function,Object,我有一个java代码,我试图通过将类的对象传递给函数来打印语句。代码如下: import java.io.*; class Abc { public static void print(Object o) { o.name(); } public static void main(String args[]) { Vendor obj=new Vendor(); print(obj); } } cl

我有一个java代码,我试图通过将类的对象传递给函数来打印语句。代码如下:

import java.io.*;

class Abc
{

    public static void print(Object o)
    {
       o.name();
    }

    public static void main(String args[])
    {
       Vendor obj=new Vendor();
       print(obj);
    }
}

class Vendor
{
    public void name()
    {
       System.out.println("The name of the customer is chandeep");
    }

}

我得到的错误是,在Abc类中找不到符号名()。我知道这是一个适当的错误,但我如何解决它

它不起作用,因为
Object
类没有
name()
这样的方法,而您正试图在类型为
Object
的引用上调用它

只需更改方法签名,将
供应商
引用作为参数:-

public static void print(Vendor vendor) {
     vendor.name();
}

由于您的方法
name()
位于
Vendor
类中,并且您正在传递
Vendor
的引用,因此您不需要在方法中使用
对象作为形式参数

它不起作用,因为
Object
类没有
name()
这样的方法,而您正试图在类型为
Object
的引用上调用它

只需更改方法签名,将
供应商
引用作为参数:-

public static void print(Vendor vendor) {
     vendor.name();
}

由于您的方法
name()
位于
Vendor
类中,并且您正在传递
Vendor
的引用,因此您不需要在方法中使用
对象作为形式参数

如果您知道o是供应商,则将其强制转换为类型供应商,或者将参数类型重写为仅为供应商,而不是方法定义中的泛型对象

如果您知道o是供应商,则将其强制转换为类型供应商,或者将参数类型重写为仅为供应商,而不是方法定义中的泛型对象

方法
print()
的参数类型为
对象
而不是
供应商
类型。因此,它需要类型为
Object
的任何实例,该实例没有方法
name()
。当然,实际的实例可能会扩展
对象
,并将
name()
添加到方法列表中,但编译器无法知道这一点


如果希望
print()
方法只接受
Vendor
,只需将参数从
Object
更改为
Vendor
。如果希望它接受不同的对象,则需要一种稍微复杂一些的面向对象方法。

因为方法
print()
的参数类型为
object
而不是
Vendor
类型。因此,它需要类型为
Object
的任何实例,该实例没有方法
name()
。当然,实际的实例可能会扩展
对象
,并将
name()
添加到方法列表中,但编译器无法知道这一点


如果希望
print()
方法只接受
Vendor
,只需将参数从
Object
更改为
Vendor
。如果您想让它接受不同的对象,那么您需要一种稍微复杂一点的面向对象方法。

强制转换是个坏主意。更改参数类型是个好主意。OP是否表示他/她可以自由更改方法的参数类型,或者您只是假设了这一点?答案是,你只是假设。该方法可以是他/她正在编写的API,它有一个故意使用的泛型参数类型,即他/她不能随意更改的等于(对象)。如果您阅读我写的内容,您会发现我涵盖了这两种情况,并指出了在可能的情况下更改参数类型的首选项。你在假设OP从未说过的话,并据此给出不好的建议。选角是个坏主意。更改参数类型是个好主意。OP是否表示他/她可以自由更改方法的参数类型,或者您只是假设了这一点?答案是,你只是假设。该方法可以是他/她正在编写的API,它有一个故意使用的泛型参数类型,即他/她不能随意更改的等于(对象)。如果您阅读我写的内容,您会发现我涵盖了这两种情况,并指出了在可能的情况下更改参数类型的首选项。你在假设OP从未说过的话,并据此给出不好的建议。OP没有表示他可以自由更改参数类型。如果他是,那么改变它是正确的。如果他不是,那么你的建议是无用的,他必须投。在攻击他人之前,请仔细考虑他人的答案,如下所示。谢谢-1对于基于假设的不完整建议-因为攻击其他的海报,事实上,这些海报给出了正确的答案。为什么他不能根据你的意见改变呢?类Abc没有实现任何接口,也没有扩展任何限制它的抽象类,因此没有对不更改print()的限制,main()类在他显示的代码中,因此从上下文来看,他显然是一个试图学习OO概念的初学者。我说过,如果他想要接受不同的对象,他需要一种更复杂的OO方法,这不是类型转换。从他接受的答案可以看出,事实上是前者。打字一直被认为是最后的手段,先去学一些OOP。嘿,谢谢,我对OOP很熟悉。至于你的反驳,不,用户只是说他“拥有”一个类,这个类是一个模棱两可的语句,意思仅仅是因为某种原因他正在与一个类交互。。他可能是作者,也可能是消费者。他的问题中没有任何东西表明它是什么。因此,我给出了两个答案。问题是,你没有理由贬低我,因为你对我的答案的评价是事实上、客观上的错误。如果你要贬低别人,你应该对他们保持谨慎和准确。你们两个都不是。你们似乎不明白软件是由独立的团队编写的,他们相互使用自制的类。他们没有修改正在编写的类的选项(用OP的说法是“有”)。正如我在回答中所说的,如果参数是泛型的,那么如果不能重写它,您可能需要强制转换。顺便说一句,d