繁体   English   中英

如何从另一个 package 创建非公共 class 的列表类型?

[英]how to create a List type of non public class from another package?

我的 Package A 有一个 java 文件,其中包含 2 个类。 登录 class 和 LoginDetails class 因为它在同一个文件中所以不能公开。 如何从 Package B 创建 LoginDetails 类型列表

package A;


public class Login {

    
    private String name;
    private String passWord;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassWord() {
        return passWord;
    }
    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
    @Override
    public String toString() {
        return "Login [name=" + name + ", passWord=" + passWord + "]";
    }
    
    
}

class LoginDetails{
    
    public LoginDetails(int id, int geight) {
        super();
        this.id = id;
        this.geight = geight;
    }
    private int id;
    private int geight;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getGeight() {
        return geight;
    }
    public void setGeight(int geight) {
        this.geight = geight;
    }
    public void hidden() {
        System.out.println("From hidden");
    }
    public LoginDetails() {
        
    }
    
    
}

package B;


import java.util.ArrayList;
import java.util.List;

public class Demo {

    public static void main(String[] args) throws Exception {
        
        List<LoginDetails> l = new ArrayList<LoginDetails>();
    }

}

一个不包括更改LoginLoginDetails类的奇怪问题的解决方案是添加第二个名为AUtils的 Public class,如下所示:

AUtils/AFactory class

package A;

import java.util.ArrayList;

public class AUtils  {
    public static ArrayList<LoginDetails> generateList(){
        return new ArrayList<LoginDetails>();
    }
    public static ArrayList<LoginDetails> generateListWithInitialSize(int x){
        return new ArrayList<LoginDetails>(x);
    }

    public static LoginDetails generateAnObject(){
        return new LoginDetails();
    }

    public static LoginDetails generateWithData(int id, int geight){
       return new LoginDetails(id,geight);
    }
}

你的Demo看起来像这样:

public class Demo {

    public static void main(String[] args)  {//plus you dont need To throw exception thus your program dont throw any!:)

        List l = AUtils.generateList();
//        List l = AUtils.generateListWithInitialSize(10);//will give you array list with initial size 10

        l.add(AUtils.generateAnObject());//if you do so be aware that the objects would be created with 0 as id and eight.
//        l.add(AUtils.generateWithData(3,3));
    }

}

请注意,这通常是不可接受的,并且被认为是糟糕的编码,因为它有点转身;)所以要么你误解了作业,要么写作业的人真的是胡萝卜。

快乐编码。

如果不更改类的设计或可见性,您无法直接执行此操作。

如果 class 没有修饰符(默认值,也称为包私有),则它仅在其自己的 package 中可见。

https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM