Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Netbeans警告:通过公共API导出非公共类型_Java_Api_Static_Encapsulation - Fatal编程技术网

Java Netbeans警告:通过公共API导出非公共类型

Java Netbeans警告:通过公共API导出非公共类型,java,api,static,encapsulation,Java,Api,Static,Encapsulation,我正在制作一个流畅的2D游戏。现在,我正在创建一个视频类,它包含内部类(FrameSize、FPS、FullScreen..)。所以我有一个好主意,用板条箱包装,就像我们称之为System.out.println()。这意味着我将拥有他的内部类的公共视频类和公共静态实例,但netbeans IDE给了我一个提示“通过公共API导出非公共类型”。所以,我应该忽略这一点,继续按照我的方式做,还是你能给我建议你的想法就好了 录像带 音频 公共类音频{ 私人静态声音; 私有静态卷; 专用音频(){} 公

我正在制作一个流畅的2D游戏。现在,我正在创建一个视频类,它包含内部类(FrameSize、FPS、FullScreen..)。所以我有一个好主意,用板条箱包装,就像我们称之为System.out.println()。这意味着我将拥有他的内部类的公共视频类和公共静态实例,但netbeans IDE给了我一个提示“通过公共API导出非公共类型”。所以,我应该忽略这一点,继续按照我的方式做,还是你能给我建议你的想法就好了

录像带

音频

公共类音频{
私人静态声音;
私有静态卷;
专用音频(){}
公共void加载参数(扫描程序加载输入){
布尔值isAudio=false;
字符串读取线;
while(loadInput.hasNext()){
readLine=loadInput.next();
if(readLine.equalsIgnoreCase(“音频”)){
isAudio=真;
打破
}
}
while(isAudio&&loadInput.hasNext()){
readLine=loadInput.next();
if(readLine.equalsIgnoreCase(“end”)){
打破
}
String[]line=readLine.split(“”);
字符串键=行[0];
字符串值=行[1];
开关(钥匙){
案例“声音”:
打破
案例“卷”:
打破
违约:
System.err.println(“未知音频键:+键”);
打破
}
}
}
公共void保存参数(字符串文件路径){
扫描仪保存输入;
试一试{
saveInput=新扫描仪(新文件(文件路径));
}捕获(FileNotFoundException fne){
System.err.println(“无效设置文件”);
返回;
}
//要执行的操作:保存功能
saveInput.close();
}
班级声音{
私人布尔音;
私有声音(){}
公共布尔值isSound(){
回音;
}
公共无效设置声音(布尔声音){
这个声音=声音;
}
@凌驾
公共字符串toString(){
返回“+”声音;
}        
}
班级数量{
专用静态最终双节距=0.1d;
私人双卷;
专用卷(){}
公共双卷{
返回量;
}
公共卷(双卷){
这个。体积=体积;
}
public void increaseVolume(){
如果(!isVolumeRange(this.volume)){
返回;
}
this.volume=this.volume+音高;
}
公共空间减少量(){
如果(!isVolumeRange(this.volume)){
返回;
}
this.volume=this.volume-音高;
}
公共布尔值isVolumeRange(双卷){

return volume>=0.0&&volume
Video
类包含类型为
frameSize
的公共类变量
frameSize
的声明
public
修饰符意味着
frameSize
变量对所有人都可见。

package package1;

public class Video {
   public static FrameSize frameSize;
}
// private class
class FrameSize {
}
但是
FrameSize
是一个本地类-它仅对同一个包的成员可见。在上面的示例中,只有包
package1
的成员才能看到该类,下面的代码编译良好:

package package1;

public class Test {

    void test(){
        FrameSize x = Video.frameSize;
    }
}
但是,此代码(不同的包)会产生编译错误:

package package2;
import package1.*;

public class Test {
  void test(){
    // this line won't compile - FrameSize class is unknown
    FrameSize x = Video.frameSize; 

    // but this line compiles fine - Object class is public
    Object y = Video.frameSize; 
   }
}
NetBeans警告您这一点,因为这很可能是无意中的错误-为什么要让所有人都可以访问某个字段值而不发布该字段的类型,这实际上会阻止他们使用该字段?

如果要使变量仅可供同一软件包中的其他类访问,请将其声明为
受保护
,而不是
公共


但是,如果这是有意声明,那么忽略警告并保持原样。

我理解。我不知道这一点。但是,你能给我提出另一个这样做的想法吗?这是我的第二个问题,因为我不建议这样做,因为我肯定会在其他包中使用这些类,我是否应该将它们设置为内部类作为一个静态类?哦,等等,这个警告是否适用于和内部类,因为您已经在上面为我展示了视频类之外的私有类的示例?好的,我刚刚测试了FramSize作为视频类的嵌套类,并将其设置为public,这是正确的方法吗?如果需要,只需将
FrameSize
设置为public类即可在其他软件包中可见。是的,这就是我要做的。错误在我看来很明显。可能会将类迁移到非公共的环境中,或者使用接口导出所需的内容?
package package1;

public class Test {

    void test(){
        FrameSize x = Video.frameSize;
    }
}
package package2;
import package1.*;

public class Test {
  void test(){
    // this line won't compile - FrameSize class is unknown
    FrameSize x = Video.frameSize; 

    // but this line compiles fine - Object class is public
    Object y = Video.frameSize; 
   }
}