Java - 给定接口与方法 - 参数如何传递?

时间:2016-08-12 12:36:20

标签: java methods parameters interface concept

我尝试将代码保持为尽可能通用,这仅代表 基本设置。我是一名Java初学者,试图理解接口,类 和方法。我确实更改了接口名称和类名称以进行引用 他们更容易。我完全清楚这段代码不会编译。 我试图理解这个概念。

给定是一个接口,具有现有的InterfaceClass和另一个类 使用界面。

接口

public interface IInterface extends Comparable<IInterface>{    
    String getContent() throws DumbException;
}

类别:

public class InterfaceClass implements IInterface{
    public String getContent() throws DumbException {
        // here I would need a parameter (filepath) to get a file 
        // and read its content and return the content as string
        // however the interface doesn't provide a parameter for this
        // method. So how is this done?
    }
}

使用该方法的类:

public class Frame extends AbstractFrame {
    public void setDetails(IInterface details) {
        // This is the call I don't understand...
        details.getContent();     
    }
}

我不明白的部分是: 详细信息对象如何为 getContent()提供任何参数? 我的意思是我甚至没有看到除了 IInterface细节

之外定义这个对象

3 个答案:

答案 0 :(得分:1)

解决方案1 ​​

您可以将override func viewDidLoad() { super.viewDidLoad() self.collectionView.allowsMultipleSelection = true } func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { let selectedRows: [NSIndexPath] = self.collectionView.indexPathsForSelectedItems()! for selectedRow: NSIndexPath in selectedRows { if (selectedRow.section == indexPath.section) && (selectedRow.row != indexPath.row) { self.collectionView.deselectItemAtIndexPath(selectedRow, animated: false) } } } 重新定义为

IInterface

用法是

public interface IInterface extends Comparable<IInterface>{    
    String getContent(String filepath) throws DumbException;
}

public class InterfaceClass implements IInterface{
    public String getContent(String filepath) throws DumbException {
        // use filepath to get the file's content
    }
}

解决方案2

您无法更改public class Frame extends AbstractFrame { public void setDetails(IInterface details) { details.getContent("/path/to/some/folder"); } } ,但可以向IInterface添加构造函数

InterfaceClass

用法是

public class InterfaceClass implements IInterface{
    private String filepath;

    public InterfaceClass(String filepath) {
        this.filepath = filepath;
    }

    public String getContent() throws DumbException {
        // use filepath to get the file's content
    }
}

答案 1 :(得分:0)

您可以在基类

中的构造函数中传递数据
public class InterfaceClass implements IInterface{

    private String data;

    public InterfaceClass(String data) {
        this.data = data;  
    }

    public String getContent() throws DumbException {
        //do something here with data

        // here I would need a parameter (filepath) to get a file 
        // and read its content and return the content as string
        // however the interface doesn't provide a parameter for this
        // method. So how is this done?
    }
}

您现在可以使用此课程:

IInterface myNewClass = new InterfaceClass("blablabla");
frameClass.setDetails(myNewClass);

并将其传递给第二堂课。

答案 2 :(得分:0)

    public interface IInterface extends Comparable<IInterface>{

            String getContent() throws DumbException;
        }

    public class InterfaceClass implements IInterface{
        public String getContent() throws DumbException {//this method is of string type so you must provide return type 
            return "some details";
        }
    }

public class Frame extends AbstractFrame {
    public void setDetails(IInterface details) {
       System.out.println(details.getContent()); //output:- some details

    }
}

public class SomeClass{
public void someMethod(){
new Frame().setDetails(new InterfaceClass)
} 
}

请在此处注明SomeClass。在SomeClass,您正在传递object扩展类interfaceClass(这是ploymorphism)。

和你一样,你需要将对象传递给interface变量,如IInterface details=new InterfaceClass()一些任何其他实现IInterface but note that the class must extend that IInterface and in your case it is interfaceClass` <的类。 /强>

如果你没有这样做,它将抛出nullpointerExecption,因为它只是一个引用变量,所以你需要用该方法传递实际类的对象,而ploymorphism将处理休息。

注意这是访问子类的常用方法,并提供松散耦合,如果您将使用spring,您会更清楚。

希望有所帮助