`
txidol
  • 浏览: 54396 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【不合法的访问】小心其他包中的非公共类型

 
阅读更多

原则:访问位于其他包中的非公共类型的成员是不合法的,即便该成员被声明为某公共类型的公共成员。

 

案列1:

 

package coner_case;

import java.util.*;
import java.lang.reflect.*;

public class Reflector {
	public static void main(String[] args) throws Exception{
		Set<String> s = new HashSet<String>();
		s.add("foo");
		Iterator<String> it  = s.iterator();
		
		//Method m = it.getClass().getMethod("hasNext");
		//这种惯用技法,有问题,不推荐使用  
		//it.getClass()得到是私有的嵌套类KeyIterator
				
		//替换注释部分,使用注释部分,运行会报该类型不是公共类型
		Method m = Iterator.class.getMethod("hasNext");
		
		System.out.println(m.invoke(it));
	}
}


案列2:

 

 

package library;
public class Api{
	static class PackagePrivate{}
	public static PackagePrivate member = new PackagePrivate();
}

package client;
import library.Api;
class Client{
	public static void main(String[] args) {
		//注释部分无法编译噢   调用的类型是位于其他包中的非公共类型
		//System.out.println(Api.member.hashCode());
		System.out.println(((Object)Api.member).hashCode());
	}
}


 

分享到:
评论

相关推荐

    四个公共的类放在四个包中为何在提示出错?

    如果一个公共类(public class)被错误地放置在一个不希望它被访问的包中,可能会导致访问权限问题。检查类的访问修饰符是否与包的结构匹配。 3. **包结构不正确**:在Eclipse中,项目的源代码目录结构需要与包结构...

    访问权限及继承

    访问权限在面向对象编程中主要指定了类、接口、方法和变量可被其他代码访问的程度。通常,有四种基本的访问修饰符: 1. **private**:这是最严格的访问级别,仅允许在定义它的同一类内部访问。使用private修饰的...

    数据库访问公共类

    数据库访问公共类

    java成员变量和方法的public等访问限定符的访问权限.doc

    private 访问权限是最严格的访问权限,表示该成员变量或方法只能被同一个类访问,不能被其他类访问。例如,在上面的例子中,类 P 的私有成员变量 data 不能被其他类访问,包括子类 Q。 protected 访问权限 ...

    5 非公共公司的制度特征分析.pptx

    本部分将详细探讨三种主要类型的非公共公司:合伙企业、家族企业和股份合作企业。 **5.1 合伙企业** 合伙企业是由两个或多个合伙人共同投资、共同经营的企业形式。根据合伙人责任的不同,合伙企业可分为普通合伙...

    java访问权限修饰符[参考].pdf

    - **public**:无论成员变量还是方法,只要使用`public`修饰,那么它们就可以在任何地方被访问,包括其他包中的类。 - **protected**:被`protected`修饰的成员变量和方法只能在同一个包内的类或者不同包中的子类中...

    java的访问修饰符的范围说明

    但是,非子类的其他类无法访问这些成员。这种权限常用于需要子类访问或重写(Override)父类方法,而阻止其他类随意访问的场景。 4. 公共权限(public): public修饰符提供了最宽松的访问控制,它允许任何其他类...

    12_访问控制符_1 视频

    私有成员变量和方法使外部代码不能直接访问,需要通过公共的getter和setter方法进行访问,增强了代码的安全性和维护性。 2. **继承与覆盖**:在继承关系中,子类可以访问父类的受保护成员,但不能访问父类的私有...

    asp.net(c#)不可访问,因为它受保护级别限制

    这个问题通常出现在尝试访问非公共(non-public)成员时,比如在一个类中定义了一个非公共的属性或方法,然后试图从另一个类中访问它。 #### 错误示例分析 在提供的示例中,作者提到了在编写一个复数类(`complex`...

    Java入门笔记4_访问控制和包

    2. **`protected`**:表示受保护,可以在同一类内、同一包内以及不同包内的子类中被访问,但不能在不同包的非子类中访问。 3. **`default`**:也称为包访问权限,如果没有指定任何访问修饰符,则默认为`default`。...

    2019年继续教育非公共课时真题答案.doc

    2019年继续教育非公共课时真题答案.doc

    2019年继续教育非公共课时真题答案.docx

    2019年继续教育非公共课时真题答案.docx

    eclipse中对包的访问

    3. **访问控制的调整**:如果你不希望其他包的类访问这些公共类,你可以考虑降低它们的访问级别,例如使用default或protected。这样,只有在同一包或子包内的类才能访问它们。 4. **Eclipse的项目设置**:检查...

    基于Java的实例源码-访问权限控制源代码.zip

    如果想让类能在其他包中被使用,需要声明为`public`。 - **方法和变量的访问权限**:合理设置方法和变量的访问权限,可以确保数据的安全。例如,敏感数据通常设为`private`,提供公共的getter和setter方法来读写。 ...

    第6章 包、访问控制和接口1

    `import`语句用于引入其他包中的类,以便在当前源文件中使用。有两种引入方式:一是直接指定要引入的特定类,如`import src.Point;`;二是使用通配符`*`,如`import src.*;`,这将引入src包下的所有类。但需要注意,...

    Java访问权限控制源代码.zip

    4. **公共(Public)**:public是最宽松的访问权限,被其修饰的成员可以在任何地方被访问,不受包的限制。 接下来,我们来看看这些访问修饰符在类、接口、字段和方法上的应用: - **类和接口**:只有public类和...

    java Java合法标识符

    不能以数字开头,否则编译器会将其解析为数值而非标识符。 2. **后续字符**:除了开头字符外,后续可以是字母、数字、下划线或美元符号。数字(0-9)可以出现在标识符的任何位置,但不推荐作为开头,以避免混淆。 ...

    Java主要修饰符的使用[归纳].pdf

    不能访问非静态成员,因为它们需要对象实例。 示例代码: ```java public class Father { public int pubvan; protected int provan; private int privan; public void setPrivan(int privan) { this.privan ...

    java scjp考点

    - 子类继承保护成员时,其他包中的类无法直接访问这些成员。 7. **局部变量**: - 局部变量声明不支持访问修饰符。 - `final` 是唯一可以应用于局部变量的修饰符。 - 局部变量在使用前必须初始化,因为它们没有...

Global site tag (gtag.js) - Google Analytics